diff --git a/docs/_build/doctrees/EV3.doctree b/docs/_build/doctrees/EV3.doctree index e241fa3c490987e365f278a98ea9a4237aea1362..2e39e1100a61f0dfe0400888f762b21a8b510302 100644 Binary files a/docs/_build/doctrees/EV3.doctree and b/docs/_build/doctrees/EV3.doctree differ diff --git a/docs/_build/doctrees/Motor.doctree b/docs/_build/doctrees/Motor.doctree index 1429c57d4bd203241703f8f5a587ce3f423a19a1..3aa7d5f18da7da47d12b05e78564d07c4bb9eaf8 100644 Binary files a/docs/_build/doctrees/Motor.doctree and b/docs/_build/doctrees/Motor.doctree differ diff --git a/docs/_build/doctrees/Sensor.doctree b/docs/_build/doctrees/Sensor.doctree index 0822823b56737b5b831152b98799d9090d073ce7..53b1b15cfb8aecfaa610a796a1733f558e82466a 100644 Binary files a/docs/_build/doctrees/Sensor.doctree and b/docs/_build/doctrees/Sensor.doctree differ diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle index 7ea245add719ff2f08796f99df89b95f2bfae5be..8a48fa465dce05674c054dd6d48c9b077a32c5c8 100644 Binary files a/docs/_build/doctrees/environment.pickle and b/docs/_build/doctrees/environment.pickle differ diff --git a/docs/_build/doctrees/examples.doctree b/docs/_build/doctrees/examples.doctree index 645cd7fd6da6d09b9f99cc6d188944fb3015f6fe..a9a4aba4ea21fb7062ac10890fba3a27aee4a3d1 100644 Binary files a/docs/_build/doctrees/examples.doctree and b/docs/_build/doctrees/examples.doctree differ diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree index 952b1194b5678af1f549ba8a6e96699a8ca413eb..f8184d261e3623d707fdaf3f8a432b79760f9af6 100644 Binary files a/docs/_build/doctrees/index.doctree and b/docs/_build/doctrees/index.doctree differ diff --git a/docs/_build/doctrees/readme.doctree b/docs/_build/doctrees/readme.doctree index 064a22e02b19f19c629d5631abcd64dc98202c24..10fd5a846a2c6469d73d1e9444d353551adab5fa 100644 Binary files a/docs/_build/doctrees/readme.doctree and b/docs/_build/doctrees/readme.doctree differ diff --git a/docs/_build/doctrees/source.doctree b/docs/_build/doctrees/source.doctree index 661b7d0994baa1c79982f55d0003ddc9e708ed0d..394c9ec6b794d2351e4b5aae9af01b69ff1a133e 100644 Binary files a/docs/_build/doctrees/source.doctree and b/docs/_build/doctrees/source.doctree differ diff --git a/docs/_build/html/EV3.html b/docs/_build/html/EV3.html index dce9c0a6f2481521f94c419c374111237175058c..7f30eca689a28b2a910b53e71062e018a8f89f4e 100644 --- a/docs/_build/html/EV3.html +++ b/docs/_build/html/EV3.html @@ -153,53 +153,57 @@ commands to it. An EV3-object creates 4 Motor- and 4 Sensor-objects, one for eac <ul class="simple"> <li>Creating multiple EV3 objects and connecting them to different physical bricks has not been thoroughly tested yet, but seems to work on a first glance.</li> +<li>When an input argument of a method is marked as optional, the argument needs to be +'announced' by a preceding 2nd argument, which is a string containing the name of the argument. +For example, Motor.setProperties may be given a power-parameter. The syntax would be as +follows: <em>brickObject.motorA.setProperties('power', 50);</em></li> </ul> <dl class="attribute"> <dt id="source.EV3.motorA"> <code class="descname">motorA</code><a class="headerlink" href="#source.EV3.motorA" title="Permalink to this definition">¶</a></dt> -<dd><p><em>Motor</em> – Motor-object interfacing port A</p> +<dd><p><em>Motor</em> – Motor-object interfacing port A. See also <a class="reference internal" href="Motor.html#source.Motor" title="source.Motor"><code class="xref mat mat-class docutils literal"><span class="pre">Motor</span></code></a>.</p> </dd></dl> <dl class="attribute"> <dt id="source.EV3.motorB"> <code class="descname">motorB</code><a class="headerlink" href="#source.EV3.motorB" title="Permalink to this definition">¶</a></dt> -<dd><p><em>Motor</em> – Motor-object interfacing port B</p> +<dd><p><em>Motor</em> – Motor-object interfacing port B. See also <a class="reference internal" href="Motor.html#source.Motor" title="source.Motor"><code class="xref mat mat-class docutils literal"><span class="pre">Motor</span></code></a>.</p> </dd></dl> <dl class="attribute"> <dt id="source.EV3.motorC"> <code class="descname">motorC</code><a class="headerlink" href="#source.EV3.motorC" title="Permalink to this definition">¶</a></dt> -<dd><p><em>Motor</em> – Motor-object interfacing port C</p> +<dd><p><em>Motor</em> – Motor-object interfacing port C. See also <a class="reference internal" href="Motor.html#source.Motor" title="source.Motor"><code class="xref mat mat-class docutils literal"><span class="pre">Motor</span></code></a>.</p> </dd></dl> <dl class="attribute"> <dt id="source.EV3.motorD"> <code class="descname">motorD</code><a class="headerlink" href="#source.EV3.motorD" title="Permalink to this definition">¶</a></dt> -<dd><p><em>Motor</em> – Motor-object interfacing port D</p> +<dd><p><em>Motor</em> – Motor-object interfacing port D. See also <a class="reference internal" href="Motor.html#source.Motor" title="source.Motor"><code class="xref mat mat-class docutils literal"><span class="pre">Motor</span></code></a>.</p> </dd></dl> <dl class="attribute"> <dt id="source.EV3.sensor1"> <code class="descname">sensor1</code><a class="headerlink" href="#source.EV3.sensor1" title="Permalink to this definition">¶</a></dt> -<dd><p><em>Sensor</em> – Motor-object interfacing port 1</p> +<dd><p><em>Sensor</em> – Motor-object interfacing port 1. See also <a class="reference internal" href="Sensor.html#source.Sensor" title="source.Sensor"><code class="xref mat mat-class docutils literal"><span class="pre">Sensor</span></code></a>.</p> </dd></dl> <dl class="attribute"> <dt id="source.EV3.sensor2"> <code class="descname">sensor2</code><a class="headerlink" href="#source.EV3.sensor2" title="Permalink to this definition">¶</a></dt> -<dd><p><em>Sensor</em> – Motor-object interfacing port 2</p> +<dd><p><em>Sensor</em> – Motor-object interfacing port 2. See also <a class="reference internal" href="Sensor.html#source.Sensor" title="source.Sensor"><code class="xref mat mat-class docutils literal"><span class="pre">Sensor</span></code></a>.</p> </dd></dl> <dl class="attribute"> <dt id="source.EV3.sensor3"> <code class="descname">sensor3</code><a class="headerlink" href="#source.EV3.sensor3" title="Permalink to this definition">¶</a></dt> -<dd><p><em>Sensor</em> – Motor-object interfacing port 3</p> +<dd><p><em>Sensor</em> – Motor-object interfacing port 3. See also <a class="reference internal" href="Sensor.html#source.Sensor" title="source.Sensor"><code class="xref mat mat-class docutils literal"><span class="pre">Sensor</span></code></a>.</p> </dd></dl> <dl class="attribute"> <dt id="source.EV3.sensor4"> <code class="descname">sensor4</code><a class="headerlink" href="#source.EV3.sensor4" title="Permalink to this definition">¶</a></dt> -<dd><p><em>Sensor</em> – Motor-object interfacing port 4</p> +<dd><p><em>Sensor</em> – Motor-object interfacing port 4. See also <a class="reference internal" href="Sensor.html#source.Sensor" title="source.Sensor"><code class="xref mat mat-class docutils literal"><span class="pre">Sensor</span></code></a>.</p> </dd></dl> <dl class="attribute"> @@ -216,15 +220,13 @@ been thoroughly tested yet, but seems to work on a first glance.</li> <dl class="attribute"> <dt id="source.EV3.batteryMode"> <code class="descname">batteryMode</code><a class="headerlink" href="#source.EV3.batteryMode" title="Permalink to this definition">¶</a></dt> -<dd><p><em>string in {'Percentage', 'Voltage'}</em> – Mode for reading battery charge. -<em>[WRITABLE]</em></p> +<dd><p><em>string in {'Percentage', 'Voltage'}</em> – Mode for reading battery charge. See also <a class="reference internal" href="source.html#source.EV3.batteryValue" title="source.EV3.batteryValue"><code class="xref mat mat-attr docutils literal"><span class="pre">batteryValue</span></code></a>. <em>[WRITABLE]</em></p> </dd></dl> <dl class="attribute"> <dt id="source.EV3.batteryValue"> <code class="descname">batteryValue</code><a class="headerlink" href="#source.EV3.batteryValue" title="Permalink to this definition">¶</a></dt> -<dd><p><em>numeric</em> – Current battery charge. Depending on batteryMode, the reading -is either in percentage or voltage. <em>[READ-ONLY]</em></p> +<dd><p><em>numeric</em> – Current battery charge. Depending on batteryMode, the reading is either in percentage or voltage. See also <a class="reference internal" href="source.html#source.EV3.batteryMode" title="source.EV3.batteryMode"><code class="xref mat mat-attr docutils literal"><span class="pre">batteryMode</span></code></a>. <em>[READ-ONLY]</em></p> </dd></dl> <dl class="attribute"> @@ -233,29 +235,30 @@ is either in percentage or voltage. <em>[READ-ONLY]</em></p> <dd><p><em>bool</em> – True if virtual brick-object is connected to physical one. <em>[READ-ONLY]</em></p> </dd></dl> -<p class="rubric">Examples</p> -<p>b = EV3(); <br /> -b.connect('usb'); <br /> -ma = b.motorA; <br /> -ma.setProperties('power', 50, 'limitValue', 720); <br /> -ma.start(); <br /> +<p class="rubric">Example</p> +<p>% This example expects a motor at port A and a (random) sensor at port 1 <br /> +b = EV3(); % <br /> +b.connect('usb'); % <br /> +ma = b.motorA; % <br /> +ma.setProperties('power', 50, 'limitValue', 720); % <br /> +ma.start(); % <br /> % fun <br /> -b.sensor1.value <br /> -b.waitFor(); <br /> -b.beep(); <br /> -delete b; <br /></p> +ma.waitFor(); % <br /> +disp(b.sensor1.value); % <br /> +b.beep(); % <br /> +delete b; % <br /></p> <dl class="method"> <dt id="source.EV3.beep"> <code class="descname">beep</code><span class="sig-paren">(</span><em>ev3</em><span class="sig-paren">)</span><a class="headerlink" href="#source.EV3.beep" title="Permalink to this definition">¶</a></dt> <dd><p>Plays a 'beep'-tone on brick.</p> <p class="rubric">Notes</p> <ul class="simple"> -<li>This equals playTone(10, 1000, 100) (Wraps the same opCode in comm-layer)</li> +<li>This equals playTone(10, 1000, 100).</li> </ul> <p class="rubric">Example</p> -<p>b = EV3(); <br /> -b.connect('bt', 'serPort', '/dev/rfcomm0'); <br /> -b.beep(); <br /></p> +<p>b = EV3(); % <br /> +b.connect('bt', 'serPort', '/dev/rfcomm0'); % <br /> +b.beep(); % <br /></p> </dd></dl> <dl class="method"> @@ -269,21 +272,21 @@ b.beep(); <br /></p> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> <li><strong>connectionType</strong> (<em>string in {'bt', 'usb'}</em>) – Connection type</li> <li><strong>serPort</strong> (<em>string in {'/dev/rfcomm1', '/dev/rfcomm2', ...}</em>) – Path to serial port -(if 'bt')</li> -<li><strong>beep</strong> (<em>bool</em>) – If true, EV3 beeps if connection has been established</li> +(necessary if connectionType is 'bt'). <em>[OPTIONAL]</em></li> +<li><strong>beep</strong> (<em>bool</em>) – If true, EV3 beeps if connection has been established. <em>[OPTIONAL]</em></li> </ul> </td> </tr> </tbody> </table> -<p class="rubric">Examples</p> +<p class="rubric">Example</p> <p>% Setup bluetooth connection via com-port 0 <br /> -b = EV3(); <br /> -b.connect('bt', 'serPort', '/dev/rfcomm0'); <br /> +b = EV3(); % <br /> +b.connect('bt', 'serPort', '/dev/rfcomm0'); % <br /> % Setup usb connection, beep when connection has been established -b = EV3(); <br /> -b.connect('usb', 'beep', 'on', ); <br /></p> -<p>Check connection</p> +b = EV3(); % <br /> +b.connect('usb', 'beep', 'on', ); % <br /></p> +<p>See also ISCONNECTED / <a class="reference internal" href="source.html#source.EV3.isConnected" title="source.EV3.isConnected"><code class="xref mat mat-attr docutils literal"><span class="pre">isConnected</span></code></a></p> </dd></dl> <dl class="method"> @@ -295,11 +298,10 @@ b.connect('usb', 'beep', 'on', ); <br /></p> <li>Gets called automatically when EV3-object is destroyed.</li> </ul> <p class="rubric">Example</p> -<p>b = EV3(); -b.connect('bt', 'serPort', '/dev/rfcomm0'); -% do stuff -b.disconnect();</p> -<p>Reset motors and sensors before disconnecting</p> +<p>b = EV3(); % <br /> +b.connect('bt', 'serPort', '/dev/rfcomm0'); % <br /> +% do stuff <br /> +b.disconnect(); % <br /></p> </dd></dl> <dl class="method"> @@ -320,8 +322,8 @@ b.disconnect();</p> </tbody> </table> <p class="rubric">Example</p> -<p>b = EV3(); <br /> -b.connect('bt', 'serPort', '/dev/rfcomm0'); <br /> +<p>b = EV3(); % <br /> +b.connect('bt', 'serPort', '/dev/rfcomm0'); % <br /> b.playTone(40, 5000, 1000); % Plays tone with 40% volume and 5000Hz for 1 second. <br /></p> </dd></dl> @@ -343,26 +345,26 @@ second. <br /></p> </tbody> </table> <p class="rubric">Example</p> -<p>b = EV3(); <br /> -b.connect('bt', 'serPort', '/dev/rfcomm0'); <br /> -b.setProperties('debug', 'on', 'batteryMode', 'Voltage'); <br /> -% Instead of: b.debug = 'on'; b.batteryMode = 'Voltage'; <br /></p> -<p>See also EV3.DEBUG, EV3.BATTERYMODE</p> +<p>b = EV3(); % <br /> +b.connect('bt', 'serPort', '/dev/rfcomm0'); % <br /> +b.setProperties('debug', 'on', 'batteryMode', 'Voltage'); % <br /> +% Instead of: b.debug = 'on'; b.batteryMode = 'Voltage'; % <br /></p> +<p>See also EV3.DEBUG, EV3.BATTERYMODE / <a class="reference internal" href="source.html#source.EV3.debug" title="source.EV3.debug"><code class="xref mat mat-attr docutils literal"><span class="pre">debug</span></code></a>, <a class="reference internal" href="source.html#source.EV3.batteryMode" title="source.EV3.batteryMode"><code class="xref mat mat-attr docutils literal"><span class="pre">batteryMode</span></code></a></p> </dd></dl> <dl class="method"> <dt id="source.EV3.stopAllMotors"> <code class="descname">stopAllMotors</code><span class="sig-paren">(</span><em>ev3</em><span class="sig-paren">)</span><a class="headerlink" href="#source.EV3.stopAllMotors" title="Permalink to this definition">¶</a></dt> -<dd><p>Sends a stop-command to all motor-ports</p> +<dd><p>Sends a stop-command to all motor-ports.</p> </dd></dl> <dl class="method"> <dt id="source.EV3.stopTone"> <code class="descname">stopTone</code><span class="sig-paren">(</span><em>ev3</em><span class="sig-paren">)</span><a class="headerlink" href="#source.EV3.stopTone" title="Permalink to this definition">¶</a></dt> -<dd><p>Stops tone currently played</p> +<dd><p>Stops tone currently played.</p> <p class="rubric">Example</p> -<p>b = EV3(); <br /> -b.connect('bt', 'serPort', '/dev/rfcomm0'); <br /> +<p>b = EV3(); % <br /> +b.connect('bt', 'serPort', '/dev/rfcomm0'); % <br /> b.playTone(10,100,100000000); % Accidentally given wrong tone duration :) <br /> b.stopTone(); % Stops tone immediately. <br /></p> </dd></dl> @@ -383,11 +385,11 @@ b.stopTone(); % Stops tone immediately. <br /></p> </table> <dl class="docutils"> <dt>Example</dt> -<dd>b = EV3(); <br /> -b.connect('bt', 'serPort', '/dev/rfcomm0'); <br /> -b.playTone(10, 100, 1000); <br /> -pause(0.5); <br /> -b.tonePlayed() -> Outputs 1 to console. <br /></dd> +<dd>b = EV3(); % <br /> +b.connect('bt', 'serPort', '/dev/rfcomm0'); % <br /> +b.playTone(10, 100, 1000); % <br /> +pause(0.5); % Small pause is necessary as tone does not start instantaneously <br /> +b.tonePlayed(); % -> Outputs 1 to console. <br /></dd> </dl> </dd></dl> diff --git a/docs/_build/html/Motor.html b/docs/_build/html/Motor.html index bd3dc306783c821503f95ee445f4ccd116e4f4ce..32b86f1ff907d8583ba74172acb8fe38122417c3 100644 --- a/docs/_build/html/Motor.html +++ b/docs/_build/html/Motor.html @@ -156,6 +156,10 @@ instances for each motor port, and you can work with them via the EV3-object.</l <li>The Motor-class represents motor ports, not individual motors!</li> <li>If you start a motor with power=0, the internal state will still be set to 'isRunning'</li> +<li>When an input argument of a method is marked as optional, the argument needs to be +'announced' by a preceding 2nd argument, which is a string containing the name of the argument. +For example, Motor.setProperties may be given a power-parameter. The syntax would be as +follows: <em>brickObject.motorA.setProperties('power', 50);</em></li> </ul> <dl class="attribute"> <dt id="source.Motor.power"> @@ -169,7 +173,7 @@ instances for each motor port, and you can work with them via the EV3-object.</l <dd><p><em>bool</em> – Speed regulation turned on or off. When turned on, motor will try to 'hold' its speed at given power level, whatever the load. In this mode, the highest possible speed depends on the load and mostly goes up to around 70-80 (at -this point, the Brick internally input 100% power). When turned off, motor will +this point, the Brick internally inputs 100% power). When turned off, motor will constantly input the same power into the motor. The resulting speed will be somewhat lower, depending on the load. <em>[WRITABLE]</em></p> </dd></dl> @@ -181,7 +185,7 @@ somewhat lower, depending on the load. <em>[WRITABLE]</em></p> indicating how far/long the motor should smoothly start. Depending on limitMode, the input is interpreted either in degrees or milliseconds. The first {smoothStart}-milliseconds/degrees of limitValue the motor will slowly accelerate -until reaching its defined speed. <em>[WRITABLE]</em></p> +until reaching its defined speed. See also <a class="reference internal" href="#source.Motor.limitValue" title="source.Motor.limitValue"><code class="xref mat mat-attr docutils literal"><span class="pre">limitValue</span></code></a>, <a class="reference internal" href="#source.Motor.limitMode" title="source.Motor.limitMode"><code class="xref mat mat-attr docutils literal"><span class="pre">limitMode</span></code></a>. <em>[WRITABLE]</em></p> </dd></dl> <dl class="attribute"> @@ -191,7 +195,7 @@ until reaching its defined speed. <em>[WRITABLE]</em></p> indicating how far/long the motor should smoothly stop. Depending on limitMode, the input is interpreted either in degrees or milliseconds. The last [smoothStop]-milliseconds/degrees of limitValue the motor will slowly slow down -until it has stopped. <em>[WRITABLE]</em></p> +until it has stopped. See also <a class="reference internal" href="#source.Motor.limitValue" title="source.Motor.limitValue"><code class="xref mat mat-attr docutils literal"><span class="pre">limitValue</span></code></a>, <a class="reference internal" href="#source.Motor.limitMode" title="source.Motor.limitMode"><code class="xref mat mat-attr docutils literal"><span class="pre">limitMode</span></code></a>. <em>[WRITABLE]</em></p> </dd></dl> <dl class="attribute"> @@ -199,13 +203,13 @@ until it has stopped. <em>[WRITABLE]</em></p> <code class="descname">limitValue</code><a class="headerlink" href="#source.Motor.limitValue" title="Permalink to this definition">¶</a></dt> <dd><p><em>numeric>=0</em> – Degrees/Time indicating how far/long the motor should run. Depending on limitMode, the input is interpreted either in degrees or -milliseconds. <em>[WRITABLE]</em></p> +milliseconds. See also <a class="reference internal" href="#source.Motor.limitMode" title="source.Motor.limitMode"><code class="xref mat mat-attr docutils literal"><span class="pre">limitMode</span></code></a>. <em>[WRITABLE]</em></p> </dd></dl> <dl class="attribute"> <dt id="source.Motor.limitMode"> <code class="descname">limitMode</code><a class="headerlink" href="#source.Motor.limitMode" title="Permalink to this definition">¶</a></dt> -<dd><p><em>'Tacho'|'Time'</em> – Mode for motor limit. <em>[WRITABLE]</em></p> +<dd><p><em>'Tacho'|'Time'</em> – Mode for motor limit. See also <a class="reference internal" href="#source.Motor.limitValue" title="source.Motor.limitValue"><code class="xref mat mat-attr docutils literal"><span class="pre">limitValue</span></code></a>. <em>[WRITABLE]</em></p> </dd></dl> <dl class="attribute"> @@ -233,14 +237,14 @@ command has been called. <em>[WRITABLE]</em></p> <dl class="attribute"> <dt id="source.Motor.tachoCount"> <code class="descname">tachoCount</code><a class="headerlink" href="#source.Motor.tachoCount" title="Permalink to this definition">¶</a></dt> -<dd><p><em>numeric</em> – Current tacho count. <em>[READ-ONLY]</em></p> +<dd><p><em>numeric</em> – Current tacho count in degrees. <em>[READ-ONLY]</em></p> </dd></dl> <dl class="attribute"> <dt id="source.Motor.currentSpeed"> <code class="descname">currentSpeed</code><a class="headerlink" href="#source.Motor.currentSpeed" title="Permalink to this definition">¶</a></dt> <dd><p><em>numeric</em> – Current speed of motor. If speedRegulation=on this should equal power, -otherwise it will probably be lower than that. <em>[READ-ONLY]</em></p> +otherwise it will probably be lower than that. See also <a class="reference internal" href="#source.Motor.speedRegulation" title="source.Motor.speedRegulation"><code class="xref mat mat-attr docutils literal"><span class="pre">speedRegulation</span></code></a>. <em>[READ-ONLY]</em></p> </dd></dl> <dl class="attribute"> @@ -253,7 +257,7 @@ otherwise it will probably be lower than that. <em>[READ-ONLY]</em></p> <dt id="source.Motor.internalReset"> <code class="descname">internalReset</code><span class="sig-paren">(</span><em>motor</em><span class="sig-paren">)</span><a class="headerlink" href="#source.Motor.internalReset" title="Permalink to this definition">¶</a></dt> <dd><p>Resets internal tacho count. Use this if motor behaves weird (i.e. not starting at all, or not correctly -running to limitValue)</p> +running to limitValue).</p> <p>The internal tacho count is used for positioning the motor. When the motor is running with a tacho limit, internally it uses another counter than the one read by tachoCount. This internal tacho count needs to be reset if you @@ -262,22 +266,22 @@ brakemode is 'Coast', this function is called automatically.</p> <p class="rubric">Notes</p> <ul class="simple"> <li>A better name would probably be resetPosition...</li> -<li>Gets called automatically when starting the motor and the internal tacho</li> +<li>Gets called automatically when starting the motor and the internal tacho count is > 0</li> </ul> -<p>count is > 0</p> -<p>See also MOTOR.RESETTACHOCOUNT</p> +<p>See also MOTOR.RESETTACHOCOUNT / <a class="reference internal" href="#source.Motor.resetTachoCount" title="source.Motor.resetTachoCount"><code class="xref mat mat-attr docutils literal"><span class="pre">resetTachoCount</span></code></a></p> </dd></dl> <dl class="method"> <dt id="source.Motor.resetTachoCount"> <code class="descname">resetTachoCount</code><span class="sig-paren">(</span><em>motor</em><span class="sig-paren">)</span><a class="headerlink" href="#source.Motor.resetTachoCount" title="Permalink to this definition">¶</a></dt> -<dd><p>Resets tachocount</p> +<dd><p>Resets tachocount.</p> +<p>See also MOTOR.TACHOCOUNT / <a class="reference internal" href="#source.Motor.tachoCount" title="source.Motor.tachoCount"><code class="xref mat mat-attr docutils literal"><span class="pre">tachoCount</span></code></a></p> </dd></dl> <dl class="method"> <dt id="source.Motor.setBrake"> <code class="descname">setBrake</code><span class="sig-paren">(</span><em>motor</em>, <em>brake</em><span class="sig-paren">)</span><a class="headerlink" href="#source.Motor.setBrake" title="Permalink to this definition">¶</a></dt> -<dd><p>Apply or release brake of motor</p> +<dd><p>Apply or release brake of motor.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> @@ -286,6 +290,12 @@ brakemode is 'Coast', this function is called automatically.</p> </tr> </tbody> </table> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>This method does not affect Motor.brakeMode. After the next run, the motor +will again be stopped as specified in Motor.brakeMode.</li> +</ul> +<p>See also MOTOR.BRAKEMODE / <a class="reference internal" href="#source.Motor.brakeMode" title="source.Motor.brakeMode"><code class="xref mat mat-attr docutils literal"><span class="pre">brakeMode</span></code></a></p> </dd></dl> <dl class="method"> @@ -297,24 +307,24 @@ brakemode is 'Coast', this function is called automatically.</p> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>debug</strong> (<em>bool</em>) – </li> -<li><strong>smoothStart</strong> (<em>numeric in [0, limitValue]</em>) – </li> -<li><strong>smoothStop</strong> (<em>numeric in [0, limitValue]</em>) – </li> -<li><strong>speedRegulation</strong> (<em>bool</em>) – </li> -<li><strong>brakeMode</strong> (<em>'Coast'|'Brake'</em>) – </li> -<li><strong>limitMode</strong> (<em>'Time'|'Tacho'</em>) – </li> -<li><strong>limitValue</strong> (<em>numeric > 0</em>) – </li> -<li><strong>power</strong> (<em>numeric in [-100,100]</em>) – </li> -<li><strong>batteryMode</strong> (<em>'Voltage'|'Percentage'</em>) – </li> +<li><strong>debug</strong> (<em>bool</em>) – <em>[OPTIONAL]</em></li> +<li><strong>smoothStart</strong> (<em>numeric in [0, limitValue]</em>) – <em>[OPTIONAL]</em></li> +<li><strong>smoothStop</strong> (<em>numeric in [0, limitValue]</em>) – <em>[OPTIONAL]</em></li> +<li><strong>speedRegulation</strong> (<em>bool</em>) – <em>[OPTIONAL]</em></li> +<li><strong>brakeMode</strong> (<em>'Coast'|'Brake'</em>) – <em>[OPTIONAL]</em></li> +<li><strong>limitMode</strong> (<em>'Time'|'Tacho'</em>) – <em>[OPTIONAL]</em></li> +<li><strong>limitValue</strong> (<em>numeric > 0</em>) – <em>[OPTIONAL]</em></li> +<li><strong>power</strong> (<em>numeric in [-100,100]</em>) – <em>[OPTIONAL]</em></li> +<li><strong>batteryMode</strong> (<em>'Voltage'|'Percentage'</em>) – <em>[OPTIONAL]</em></li> </ul> </td> </tr> </tbody> </table> <p class="rubric">Example</p> -<p>b = EV3(); <br /> -b.connect('bt', 'serPort', '/dev/rfcomm0'); <br /> -b.motorA.setProperties('debug', 'on', 'power', 50, 'limitValue', 720, 'speedRegulation', 'on'); <br /> +<p>b = EV3(); % <br /> +b.connect('bt', 'serPort', '/dev/rfcomm0'); % <br /> +b.motorA.setProperties('debug', 'on', 'power', 50, 'limitValue', 720, 'speedRegulation', 'on'); % <br /> % Instead of: b.motorA.debug = 'on'; <br /> % b.motorA.power = 50; <br /> % b.motorA.limitValue = 720; <br /> @@ -324,28 +334,26 @@ b.motorA.setProperties('debug', 'on', 'power', 50, 'limitValue', 720, 'speedRegu <dl class="method"> <dt id="source.Motor.start"> <code class="descname">start</code><span class="sig-paren">(</span><em>motor</em><span class="sig-paren">)</span><a class="headerlink" href="#source.Motor.start" title="Permalink to this definition">¶</a></dt> -<dd><p>Starts the motor</p> -<p class="rubric">Notes</p> -<ul class="simple"> -<li>Right now, alternatingly calling this function with and without tacho limit -may lead to unexpected behaviour. For example, if you run the motor without -a tacholimit for some time using Coast, then stop using Coast, and then try -to run the with a tacholimit, it will stop sooner or later than expected, -or may not even start at all.</li> -</ul> -<p>Check connection and if motor is already running</p> +<dd><p>Starts the motor.</p> </dd></dl> <dl class="method"> <dt id="source.Motor.stop"> <code class="descname">stop</code><span class="sig-paren">(</span><em>motor</em><span class="sig-paren">)</span><a class="headerlink" href="#source.Motor.stop" title="Permalink to this definition">¶</a></dt> -<dd><p>Stops the motor</p> +<dd><p>Stops the motor.</p> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>If this motor has been started synced with another one (either as master or +slave, using Motor.syncedStart), syncedStop() will be called, stopping both +motors.</li> +</ul> +<p>See also MOTOR.START, MOTOR.SYNCEDSTOP / <a class="reference internal" href="#source.Motor.start" title="source.Motor.start"><code class="xref mat mat-meth docutils literal"><span class="pre">start()</span></code></a>, <a class="reference internal" href="#source.Motor.syncedStop" title="source.Motor.syncedStop"><code class="xref mat mat-meth docutils literal"><span class="pre">syncedStop()</span></code></a></p> </dd></dl> <dl class="method"> <dt id="source.Motor.syncedStart"> <code class="descname">syncedStart</code><span class="sig-paren">(</span><em>motor</em>, <em>syncMotor</em>, <em>varargin</em><span class="sig-paren">)</span><a class="headerlink" href="#source.Motor.syncedStart" title="Permalink to this definition">¶</a></dt> -<dd><p>Starts this motor synchronized with another</p> +<dd><p>Starts this motor synchronized with another.</p> <p>The motor, with which this method is called, acts as a <em>master</em>, meaning that the synchronized control is done with it und uses its parameters. When syncedStart is called, the master sets some of the slave's (syncMotor) properties to keep it @@ -363,7 +371,7 @@ The following parameters will be affected on the slave: <em>power</em>, <em>brak <li><strong>turnRatio</strong> (<em>numeric in [-200,200]</em>) – Ratio between the two master's and the slave's motor speed. With values!=0 one motor will be slower than the other or even turn into the other direction. This can be used for turning car-like -robots, for example. (Read in Firmware-comments in c_output.c): <br /> +robots, for example. <em>[OPTIONAL]</em> (Read in Firmware-comments in c_output.c): <br /> -> 0 is moving straight forward <br /> -> Negative values turn to the left <br /> -> Positive values turn to the right <br /> @@ -378,46 +386,48 @@ robots, for example. (Read in Firmware-comments in c_output.c): <br /> </table> <p class="rubric">Notes</p> <ul class="simple"> -<li>This is right now a pretty 'heavy' function, as it tests if both motors are -connected AND aren't running, wasting four packets, keep that in mind</li> +<li>This is a pretty 'heavy' function, as it tests if both motors are +connected AND aren't running, wasting four packets, keep that in mind.</li> </ul> <p class="rubric">Example</p> -<p>b = EV3(); <br /> -b.connect('usb'); <br /> -m = b.motorA; <br /> -slave = b.motorB; <br /> -m.power = 50; <br /> -m.syncedStart(slave); <br /> +<p>b = EV3(); % <br /> +b.connect('usb'); % <br /> +m = b.motorA; % <br /> +slave = b.motorB; % <br /> +m.power = 50; % <br /> +m.syncedStart(slave); % <br /> % Do stuff <br /> -m.stop(); <br /></p> +m.stop(); % <br /></p> +<p>See also MOTOR.STOP, MOTOR.SYNCEDSTOP / <a class="reference internal" href="#source.Motor.stop" title="source.Motor.stop"><code class="xref mat mat-meth docutils literal"><span class="pre">stop()</span></code></a>, <a class="reference internal" href="#source.Motor.syncedStop" title="source.Motor.syncedStop"><code class="xref mat mat-meth docutils literal"><span class="pre">syncedStop()</span></code></a></p> </dd></dl> <dl class="method"> <dt id="source.Motor.syncedStop"> <code class="descname">syncedStop</code><span class="sig-paren">(</span><em>motor</em><span class="sig-paren">)</span><a class="headerlink" href="#source.Motor.syncedStop" title="Permalink to this definition">¶</a></dt> <dd><p>Stops both motors previously started with syncedStart.</p> -<p>See also MOTOR.SYNCEDSTART</p> +<p class="rubric">Notes</p> +<ul class="simple"> +<li>This method is called automatically by stop(), if the motors have been +started using syncedStart, and the regular stop-method has been called afterwards.</li> +</ul> +<p>See also MOTOR.SYNCEDSTART, MOTOR.STOP / <a class="reference internal" href="#source.Motor.syncedStart" title="source.Motor.syncedStart"><code class="xref mat mat-meth docutils literal"><span class="pre">syncedStart()</span></code></a>, <a class="reference internal" href="#source.Motor.stop" title="source.Motor.stop"><code class="xref mat mat-meth docutils literal"><span class="pre">stop()</span></code></a></p> </dd></dl> <dl class="method"> <dt id="source.Motor.waitFor"> <code class="descname">waitFor</code><span class="sig-paren">(</span><em>motor</em><span class="sig-paren">)</span><a class="headerlink" href="#source.Motor.waitFor" title="Permalink to this definition">¶</a></dt> -<dd><p>Stops execution of program as long as motor is running</p> +<dd><p>Stops execution of program as long as motor is running.</p> <p class="rubric">Notes</p> <ul class="simple"> -<li>(OLD)This one's a bit tricky. The opCode OutputReady makes the brick stop sending +<li>This one's a bit tricky. The opCode which is supposed to be used here, OutputReady, +makes the brick stop sending responses until the motor has stopped. For security reasons, in this toolbox there is an internal timeout for receiving messages from the brick. It raises an error if a reply takes too long, which would happen in this case. As a workaround, there is an infinite loop that catches errors from outputReady and continues then, until outputReady will actually finish without an error.</li> -<li>(OLD)OutputReady (like OutputTest in isRunning) sometimes doesn't work. If -outputReady returns in less than a second, another while-loop iterates until -the motor has stopped, this time using motor.isRunning() (this only works as -long as not both OutputTest and OutputReady are buggy).</li> -<li>(OLD)Workaround: Poll isRunning (which itself return (speed>0)) until it -is false (No need to check if motor is connected as speed correctly -returns 0 if it's not)</li> +<li>Workaround: Poll isRunning until it is false (No need to check if motor is +connected as speed correctly returns 0 if it's not)</li> </ul> </dd></dl> diff --git a/docs/_build/html/Sensor.html b/docs/_build/html/Sensor.html index 0aa3344dd0829bcc1d64ad232cbca5ae06886f06..a22da31f2abfb12d57fd357ce576b87e896155c6 100644 --- a/docs/_build/html/Sensor.html +++ b/docs/_build/html/Sensor.html @@ -153,17 +153,16 @@ reading the sensor's type and current value in a specified mode.</p> <li>You don't need to create instances of this class. The EV3-class automatically creates instances for each sensor port, and you can work with them via the EV3-object.</li> <li>The Sensor-class represents sensor ports, not individual sensors!</li> +<li>When an input argument of a method is marked as optional, the argument needs to be +'announced' by a preceding 2nd argument, which is a string containing the name of the argument. +For example, Motor.setProperties may be given a power-parameter. The syntax would be as +follows: <em>brickObject.motorA.setProperties('power', 50);</em></li> </ul> <dl class="attribute"> <dt id="source.Sensor.mode"> <code class="descname">mode</code><a class="headerlink" href="#source.Sensor.mode" title="Permalink to this definition">¶</a></dt> -<dd><p><em>DeviceMode.{Type}</em> – Sensor mode in which the value will be read. By default, -mode is set to DeviceMode.Default.Undefined. Once a physical sensor is connected -to the port <em>and</em> the physical Brick is connected to the EV3-object, the allowed -mode and the default mode for a Sensor-object are the following (depending on the -sensor type): <em>[WRITABLE]</em></p> -<blockquote> -<div><ul> +<dd><p><em>DeviceMode.{Type}</em> – Sensor mode in which the value will be read. By default, mode is set to <em>DeviceMode.Default.Undefined</em>. See also <a class="reference internal" href="#source.Sensor.type" title="source.Sensor.type"><code class="xref mat mat-attr docutils literal"><span class="pre">type</span></code></a>. <em>[WRITABLE]</em> <br /> Once a physical sensor is connected to the port <em>and</em> the physical Brick is connected to the EV3-object, the allowed mode and the default mode for a Sensor-object are the following (depending on the sensor type):</p> +<ul> <li><dl class="first docutils"> <dt>Touch-Sensor:</dt> <dd><ul class="first last simple"> @@ -303,7 +302,6 @@ sensor type): <em>[WRITABLE]</em></p> </dl> </li> </ul> -</div></blockquote> </dd></dl> <dl class="attribute"> @@ -318,7 +316,7 @@ command has been called. <em>[WRITABLE]</em></p> <dt id="source.Sensor.value"> <code class="descname">value</code><a class="headerlink" href="#source.Sensor.value" title="Permalink to this definition">¶</a></dt> <dd><p><em>numeric</em> – Value read from hysical sensor. What the value represents depends on -sensor.mode. <em>[READ-ONLY]</em></p> +<a class="reference internal" href="#source.Sensor.mode" title="source.Sensor.mode"><code class="xref mat mat-attr docutils literal"><span class="pre">mode</span></code></a>. <em>[READ-ONLY]</em></p> </dd></dl> <dl class="attribute"> @@ -351,7 +349,7 @@ sensor.mode. <em>[READ-ONLY]</em></p> <dl class="method"> <dt id="source.Sensor.reset"> <code class="descname">reset</code><span class="sig-paren">(</span><em>sensor</em><span class="sig-paren">)</span><a class="headerlink" href="#source.Sensor.reset" title="Permalink to this definition">¶</a></dt> -<dd><p>Resets value on sensor</p> +<dd><p>Resets sensor value.</p> <p class="rubric">Notes</p> <ul class="simple"> <li>This clears ALL the sensors right now, no other Op-Code available... :(</li> @@ -367,17 +365,17 @@ sensor.mode. <em>[READ-ONLY]</em></p> <col class="field-body" /> <tbody valign="top"> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> -<li><strong>debug</strong> (<em>bool</em>) – </li> -<li><strong>mode</strong> (<em>DeviceMode.{Type}</em>) – </li> +<li><strong>debug</strong> (<em>bool</em>) – <em>[OPTIONAL]</em></li> +<li><strong>mode</strong> (<em>DeviceMode.{Type}</em>) – <em>[OPTIONAL]</em></li> </ul> </td> </tr> </tbody> </table> <p class="rubric">Example</p> -<p>b = EV3(); <br /> -b.connect('bt', 'serPort', '/dev/rfcomm0'); <br /> -b.sensor1.setProperties('debug', 'on', 'mode', DeviceMode.Color.Ambient); <br /> +<p>b = EV3(); % <br /> +b.connect('bt', 'serPort', '/dev/rfcomm0'); % <br /> +b.sensor1.setProperties('debug', 'on', 'mode', DeviceMode.Color.Ambient); % <br /> % Instead of: b.sensor1.debug = 'on'; <br /> % b.sensor1.mode = DeviceMode.Color.Ambient; <br /></p> </dd></dl> diff --git a/docs/_build/html/_sources/examples.txt b/docs/_build/html/_sources/examples.txt index b90c0e1cba794d0c4c0d5679dba4cb0fb9fc4ef6..7023309f75ff7a2f34e0d931f293f138eab99c60 100644 --- a/docs/_build/html/_sources/examples.txt +++ b/docs/_build/html/_sources/examples.txt @@ -1,3 +1,17 @@ ======== Examples ======== + +.. code-block:: matlab + + % This example expects a motor at port A and a (random) sensor at port 1 + b = EV3(); + b.connect('usb'); + ma = b.motorA; + ma.setProperties('power', 50, 'limitValue', 720); + ma.start(); + % fun + ma.waitFor(); + disp(b.sensor1.value); + b.beep(); + b.delete(); diff --git a/docs/_build/html/_sources/index.txt b/docs/_build/html/_sources/index.txt index f790a41dd18ca65e4ca9c630800801abb68b8658..a75f04ace42e9750f8f5f8213320a304c343fd57 100644 --- a/docs/_build/html/_sources/index.txt +++ b/docs/_build/html/_sources/index.txt @@ -19,7 +19,6 @@ To get started, take a look at the :doc:`installation instructions <readme>` and This toolbox is being developed at the RWTH Aachen, Germany, as part of the students' lab 'MATLAB meets Mindstorms'. It is the follow-up of the `MATLAB NXT Toolbox`_. -##image## .. _MATLAB NXT Toolbox: http://www.mindstorms.rwth-aachen.de/trac/ diff --git a/docs/_build/html/examples.html b/docs/_build/html/examples.html index 270af7f3b31209bb0a0554123a66af324d8f92fd..b12382444dbc5e559f2b636110bcd7445f787e69 100644 --- a/docs/_build/html/examples.html +++ b/docs/_build/html/examples.html @@ -142,6 +142,19 @@ <div class="section" id="examples"> <h1>Examples<a class="headerlink" href="#examples" title="Permalink to this headline">¶</a></h1> +<div class="highlight-matlab"><div class="highlight"><pre><span></span><span class="c">% This example expects a motor at port A and a (random) sensor at port 1</span> +<span class="n">b</span> <span class="p">=</span> <span class="n">EV3</span><span class="p">();</span> +<span class="n">b</span><span class="p">.</span><span class="n">connect</span><span class="p">(</span><span class="s">'usb'</span><span class="p">);</span> +<span class="n">ma</span> <span class="p">=</span> <span class="n">b</span><span class="p">.</span><span class="n">motorA</span><span class="p">;</span> +<span class="n">ma</span><span class="p">.</span><span class="n">setProperties</span><span class="p">(</span><span class="s">'power'</span><span class="p">,</span> <span class="mi">50</span><span class="p">,</span> <span class="s">'limitValue'</span><span class="p">,</span> <span class="mi">720</span><span class="p">);</span> +<span class="n">ma</span><span class="p">.</span><span class="n">start</span><span class="p">();</span> +<span class="c">% fun</span> +<span class="n">ma</span><span class="p">.</span><span class="n">waitFor</span><span class="p">();</span> +<span class="nb">disp</span><span class="p">(</span><span class="n">b</span><span class="p">.</span><span class="n">sensor1</span><span class="p">.</span><span class="n">value</span><span class="p">);</span> +<span class="n">b</span><span class="p">.</span><span class="n">beep</span><span class="p">();</span> +<span class="n">b</span><span class="p">.</span><span class="n">delete</span><span class="p">();</span> +</pre></div> +</div> </div> diff --git a/docs/_build/html/index.html b/docs/_build/html/index.html index 8fe8515ae9b022c5eadb4599885f16a494cb4af3..392a1f7fb1844dc2b44b4ece7648cd8c12d05788 100644 --- a/docs/_build/html/index.html +++ b/docs/_build/html/index.html @@ -151,7 +151,6 @@ these are the classes you will mostly use.</p> <p>To get started, take a look at the <a class="reference internal" href="readme.html"><span class="doc">installation instructions</span></a> and <a class="reference internal" href="examples.html"><span class="doc">examples</span></a>.</p> <p>This toolbox is being developed at the RWTH Aachen, Germany, as part of the students’ lab ‘MATLAB meets Mindstorms’. It is the follow-up of the <a class="reference external" href="http://www.mindstorms.rwth-aachen.de/trac/">MATLAB NXT Toolbox</a>.</p> -<p>##image##</p> <div class="section" id="contents"> <h2>Contents<a class="headerlink" href="#contents" title="Permalink to this headline">¶</a></h2> <p>Setting up the toolbox</p> diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js index 4a505bd84798362af93e1d3ac5cd3d1a1e732d94..878cbbcafc4f55bbc943a5ad918e960e9018eae6 100644 --- a/docs/_build/html/searchindex.js +++ b/docs/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({envversion:49,filenames:["CommandLayer","CommunicationLayer","EV3","Motor","Sensor","examples","index","readme","source"],objects:{"":{source:[8,0,1,""]},"source.EV3":{batteryMode:[8,2,1,""],batteryValue:[8,2,1,""],beep:[8,3,1,""],connect:[8,3,1,""],debug:[8,2,1,""],disconnect:[8,3,1,""],isConnected:[8,2,1,""],motorA:[8,2,1,""],motorB:[8,2,1,""],motorC:[8,2,1,""],motorD:[8,2,1,""],playTone:[8,3,1,""],sensor1:[8,2,1,""],sensor2:[8,2,1,""],sensor3:[8,2,1,""],sensor4:[8,2,1,""],setProperties:[8,3,1,""],stopAllMotors:[8,3,1,""],stopTone:[8,3,1,""],tonePlayed:[8,3,1,""]},"source.Motor":{brakeMode:[3,2,1,""],currentSpeed:[3,2,1,""],debug:[3,2,1,""],internalReset:[3,3,1,""],isRunning:[3,2,1,""],limitMode:[3,2,1,""],limitValue:[3,2,1,""],power:[3,2,1,""],resetTachoCount:[3,3,1,""],setBrake:[3,3,1,""],setProperties:[3,3,1,""],smoothStart:[3,2,1,""],smoothStop:[3,2,1,""],speedRegulation:[3,2,1,""],start:[3,3,1,""],stop:[3,3,1,""],syncedStart:[3,3,1,""],syncedStop:[3,3,1,""],tachoCount:[3,2,1,""],type:[3,2,1,""],waitFor:[3,3,1,""]},"source.Sensor":{debug:[4,2,1,""],mode:[4,2,1,""],reset:[4,3,1,""],setProperties:[4,3,1,""],type:[4,2,1,""],value:[4,2,1,""]},source:{EV3:[8,1,1,""],Motor:[3,1,1,""],Sensor:[4,1,1,""]}},objnames:{"0":["mat","module","MATLAB module"],"1":["mat","class","MATLAB class"],"2":["mat","attribute","MATLAB attribute"],"3":["mat","method","MATLAB method"]},objtypes:{"0":"mat:module","1":"mat:class","2":"mat:attribute","3":"mat:method"},terms:{"0016533dbaf5":[],"0x00":[],"0x01":[],"0x02":[],"0x03":[],"0x04":[],"0x05":[],"0x06":[],"0x07":[],"0x08":[],"0x09":[],"0x0a":[],"0x0b":[],"0x0c":[],"0x80":[],"0x81":[],"0x92":[],"0x93":[],"0x94":[],"0x95":[],"0x96":[],"0x97":[],"0x98":[],"0x99":[],"0x9a":[],"0x9b":[],"0x9c":[],"0x9d":[],"0x9e":[],"0x9f":[],"0xa0":[],"0xa1":[],"0xa2":[],"5000hz":[2,8],"5th":[],"abstract":6,"break":[],"byte":[],"case":3,"catch":3,"class":[2,3,4,6,8],"default":4,"function":3,"long":3,"new":[],"return":[2,3,8],"true":[2,3,8],"try":3,"while":[3,6],aachen:6,abl:6,about:[2,3,4,8],acceler:[3,4],accelerationallax:4,access:6,accident:[2,8],act:3,action:3,activ:[],actual:3,adapt:[],add:[],addarrai:[],adddirectcommand:[],addfiles:[],addheaderdirect:[],addheaderdirectrepli:[],addheadersystem:[],addheadersystemrepli:[],addlcsstr:[],addlength:[],address:[],addstr:[],addsystemcommand:[],addvalu:[],advanc:6,affect:3,afraid:[],after:[],again:[],all:[2,3,4,8],allow:4,alreadi:3,also:[2,3,8],alternatingli:3,ambient:4,angl:[],angular:4,ani:3,anoth:3,apply:3,aren:3,around:3,arrai:[],ask:[],automat:[2,3,4,8],avail:4,avoid:[],batteri:[2,8],batterymod:[2,3,8],batterymode:[2,8],batteryvalu:[2,8],been:[2,3,4,8],beep:[2,8],befor:[2,8],begin:[],begin_download:[],begin_getfile:[],begin_upload:[],behav:3,behaviour:[3,6],better:3,between:3,bit:3,blockheader:[],blue:4,bluetooth:[],bluetoothpin:[],bool:[2,3,4,8],both:3,brake:3,brakemod:3,brick:[2,3,4,6,8],brickio:[],buffer:[],bug:[],buggi:3,bump:4,bundl:[],button:[],bytecod:[],bytetobyt:[],c_com:[],c_output:3,call:[2,3,4,8],can:[3,4,6],cannot:[],capabl:[],car:3,central:[2,8],chang:3,charg:[2,8],check:[2,3,8],checkforerror:[],circle:[],clean:[],clear:4,close:[],close_filehandle:[],clr_all:[],clr_changes:[],cmd:[],coast:3,code:4,col:4,color:4,com:[2,8],comgetbricknam:[],comgetbtid:[],comgetmacaddress:[],comm:[2,8],command:[],comment:3,commun:[3,4,6],compress:[],comreadi:[],comsetbricknam:[],comtest:[],confus:[],connect:[2,3,4,8],connectiontyp:[2,8],consist:[3,4],consol:[2,3,4,8],constant:[],constantli:3,construct:[],constructor:[],content:[],continu:3,continue_download:[],continue_getfile:[],continue_list_files:[],continue_upload:[],contribut:[],conveni:[2,8],correctli:3,corrupt:[],corrupt_file:[],count:3,counter:3,cours:3,creat:[2,3,4,8],create_dir:[],createdir:[],current:[2,3,4,8],currentspe:3,data:[],dataset:[],dba:4,debug:[2,3,4,8],decim:[],defin:3,degre:[3,4],delet:[2,8],delete_file:[],deletefil:[],deliber:[],deliv:[2,8],depend:[2,3,4,8],descript:[],design:6,desir:[],destroi:[2,8],destructor:[],detail:[],detect:[],dev:[2,3,4,8],develop:6,devic:3,device_list:[],devicemod:4,devicetyp:[3,4],differ:[2,8],direct:3,direct_command_no_reply:[],direct_command_reply:[],direct_reply:[],direct_reply_error:[],directli:6,directori:[],disconnect:[2,8],displai:[],displaycolor:[],displayhex:[],distcm:4,distin:4,doc:[],document:6,doe:[],doesn:3,don:[3,4],done:3,down:3,download:[],draw:[],drawtest:[],durat:[2,8],each:[2,3,4,8],eas:3,easili:6,effect:[],either:[2,3,8],empti:[],enabl:[2,8],end_of_file:[],endiann:[],enterfwupdate:[],equal:[2,3,8],error:[3,4],establish:[2,8],even:3,everytim:[3,4],exampl:[],excerpt:[],execut:3,exit:[],expect:3,explicitli:[],facilit:4,fals:3,far:3,feedback:[2,3,4,8],file:[],file_exits:[],filedownload:[],files:[],fileupload:[],fillcircle:[],fillrect:[],fillwindow:[],finish:3,firmwar:[2,3,8],first:[2,3,8],five:[],follow:[3,4,6],format:[],forward:3,found:[],four:3,frequenc:[2,8],from:[2,3,4,8],front:[],fun:[2,8],gener:[],generatebytecod:[],germani:6,get:[2,3,6,8],get_brickname:[],get_bumps:[],get_changes:[],get_connection:[],get_format:[],get_id:[],get_lbatt:[],get_minmax:[],get_modename:[],get_name:[],get_network:[],get_symbol:[],get_typemode:[],get_vbatt:[],gggggggg:[],given:[2,3,8],glanc:[2,8],global:[],goe:3,greater:3,green:4,gv0:[],gyro:4,halt:[],handl:[],handle_not_ready:[],happen:3,have:[2,8],header:[],heavi:3,hertz:[2,8],hex:[],high:[2,3,4,6,8],highest:3,hold:3,how:3,howev:[],htacceleromet:4,htcolor:4,htcompass:4,html:[],hyperlink:[],hysic:4,illegal_connection:[],illegal_filename:[],illegal_path:[],imag:6,immedi:[2,3,8],index:[],indic:3,individu:[3,4],infinit:3,inform:[],infrare:4,init_run:[],input:3,input_device:[],inputdeviceclral:[],inputdeviceclrchang:[],inputdevicegetbump:[],inputdevicegetchang:[],inputdevicegetconnect:[],inputdevicegetformat:[],inputdevicegetminmax:[],inputdevicegetmodenam:[],inputdevicegetnam:[],inputdevicegettypemod:[],inputdevicelist:[],inputdevicesettypemod:[],inputdevicesymbol:[],inputpars:[2,3,4,8],inputread:[],inputreadi:[],inputreadsi:[],inputtest:[],instal:6,installat:[],instanc:[3,4],instead:[2,3,4,8],instruct:6,interfac:[2,8],intern:3,internalreset:3,interpret:3,intuit:6,inverserect:[],iotyp:[],isconnect:[2,8],iscorrupt:[],isrun:3,iter:3,itself:3,keep:3,kind:3,kit:[],know:[],lab:6,largemotor:4,last:3,later:3,layer:[2,3,4,6,8],lc0:[],lc1:[],lc2:[],lc4:[],lcs:[],lead:3,led:[],left:3,length:[],less:3,level:[2,3,4,6,8],licens:[],like:3,limit:3,limitmod:3,limitvalu:[2,3,8],line:[],link:[],list:[],list_files:[],list_open_handles:[],listen:4,listfil:[],littl:[],llllll:[],llllllgg:[],load:3,local:[],longtobyt:[],look:6,loop:3,low:[2,6,8],lower:3,lv0:[],mac:[],mai:3,mailbox:[],mailboxwrit:[],mainli:4,make:3,manual:[],master:3,max:[],max_command_globals:[],max_command_locals:[],mean:3,mediummotor:4,meet:6,messag:3,method:[2,3,8],millisecond:[2,3,8],min:[],mind:3,minstorm:[],mmi:[],mode:[2,3,4,8],modul:[],more:[],mostli:[3,6],motor:[],motora:[2,3,8],motorb:[2,3,8],motorc:[2,8],motord:[2,8],move:3,msg:[],multipl:[2,3,4,8],name:3,necessari:[],need:[3,4],neg:3,newpag:[],no_handles_available:[],no_permission:[],none:4,nos:[],note:[2,3,4,8],now:[3,4],number:[],numer:[2,3,4,8],nxt:6,nxtcolor:4,nxtlight:4,nxtsound:4,nxttemperatur:4,nxttouch:4,nxtultrason:4,object:[2,3,4,8],occur:[],off:[2,3,4,8],old:3,onc:[2,3,4,8],once:4,onli:3,only:[2,3,4,8],opcod:[2,3,8],opcom_ready:[],opcom_test:[],opcomget:[],opcomget_get_brickname:[],opcomget_id:[],opcomget_network:[],opcomset:[],opcomset_set_brickname:[],opinput_device_clr_all:[],opinput_device_clr_changes:[],opinput_device_get_bumps:[],opinput_device_get_changes:[],opinput_device_get_connection:[],opinput_device_get_format:[],opinput_device_get_minmax:[],opinput_device_get_modename:[],opinput_device_get_name:[],opinput_device_get_symbol:[],opinput_device_get_typemode:[],opinput_device_list:[],opinput_device_set_typemode:[],opinput_read:[],opinput_readsi:[],opinput_ready:[],opinput_test:[],opjr:[],opmailbox_write:[],opnop:[],opobject_end:[],opoutput_clr_count:[],opoutput_get_count:[],opoutput_polarity:[],opoutput_power:[],opoutput_read:[],opoutput_ready:[],opoutput_reset:[],opoutput_set_type:[],opoutput_speed:[],opoutput_start:[],opoutput_step_power:[],opoutput_step_speed:[],opoutput_step_sync:[],opoutput_stop:[],opoutput_test:[],opoutput_time_power:[],opoutput_time_speed:[],opoutput_time_sync:[],opposit:3,opsound:[],opsound_break:[],opsound_play:[],opsound_ready:[],opsound_repeat:[],opsound_test:[],opsound_tone:[],optimer:[],optimer_read:[],optimer_ready:[],optimer_wait:[],optional:[2,8],opui_draw:[],opui_draw_circle:[],opui_draw_clean:[],opui_draw_fillcircle:[],opui_draw_fillrect:[],opui_draw_fillwindow:[],opui_draw_inverserect:[],opui_draw_line:[],opui_draw_pixel:[],opui_draw_rect:[],opui_draw_restore:[],opui_draw_select_font:[],opui_draw_store:[],opui_draw_text:[],opui_draw_topline:[],opui_draw_update:[],opui_draw_value:[],opui_flush:[],opui_read:[],opui_read_get_lbatt:[],opui_read_get_vbatt:[],opui_write:[],opui_write_init_run:[],opui_write_led:[],opui_write_put_string:[],other:[3,4],otherwis:3,output:[2,8],outputclrcount:[],outputgetcount:[],outputpolar:[],outputpow:[],outputread:[],outputreadi:3,outputreset:[],outputspe:[],outputstart:[],outputsteppow:[],outputstepspe:[],outputstepsync:[],outputstop:[],outputstopal:[],outputtest:3,outputtimepow:[],outputtimespe:[],outputtimesync:[],over:[],packag:[],packet:[2,3,8],page:[],paramet:[2,3,4,8],part:6,pass:[3,4],path:[2,8],paus:[2,8],pdf:[],percent:[2,3,8],percentag:[2,3,8],physic:[2,3,4,8],pin:[],pixel:[],plai:[2,8],play:[],playback:[],playthreeton:[],playton:[2,8],plot:[],plotsensor:[],point:3,polar:[],poll:3,port:[2,3,4,8],posit:3,possibl:[3,4],power:[2,3,8],press:[],pretti:3,previous:3,print:[2,8],probabl:3,program:3,programheader:[],properti:[2,3,4,8],prox:4,pull:3,push:4,put_string:[],rais:3,ramp:[],rate:4,ratio:3,raw:4,reach:3,read:[2,3,4,6,8],readi:[],readm:[],readmailbox:[],ready:[],realli:[],reason:3,receiv:[2,3,8],recogn:[],rect:[],red:4,refer:[],reflect:4,regul:3,releas:3,remot:4,repeat:[],repli:3,repres:[3,4],request:3,requir:[],reset:[2,3,4,8],resetposit:3,resettachocount:3,respect:3,respons:3,restart:[],restore:[],result:3,rfcomm0:[2,3,4,8],rfcomm1:[2,8],rfcomm2:[2,8],right:[3,4],rmsg:[],robot:[3,6],rotat:[],run:3,rwth:6,same:[2,3,8],search:[],second:[2,3,8],secur:3,see:[2,3,8],seed:[],seek:4,seem:[2,8],select_font:[],send:[2,3,6,8],sensor1:[2,4,8],sensor2:[2,8],sensor3:[2,8],sensor4:[2,8],sensor:[],sent:[2,8],serial:[2,8],serport:[2,3,4,8],set:[2,3,4,6,8],set_brickname:[],set_typemode:[],setbrak:3,setbundleid:[],setbundleseedid:[],setpow:[],setproperti:[2,3,4,8],setup:[2,8],sever:6,should:3,show:[],simplifi:6,sinc:[],size:[],size_error:[],slave:3,slow:3,slower:3,slowli:3,smoothli:3,smoothstart:3,smoothstop:3,some:3,sometim:3,somewhat:3,soon:[],sooner:3,sound:[],soundplayton:[],soundreadi:[],soundstopton:[],soundtest:[],sourc:[2,3,4,8],speaker:[],special:[],specifi:4,speed:3,speedregul:3,spin:3,start:[2,3,6,8],state:3,statu:[2,3,8],still:3,stop:[2,3,8],stopallmotor:[2,8],stopton:[2,8],store:[],straight:3,string:[2,8],student:6,stuff:[2,3,8],subcallheader:[],subcod:[],sublay:[3,4],success:[],suppos:3,symbol:[],sync:3,syncedstart:3,syncedstop:3,synchron:3,syncmotor:3,system:[],system_command_no_reply:[],system_command_reply:[],system_reply:[],system_reply_error:[],tacho:3,tachocount:3,tacholimit:3,tachomet:[],take:[3,6],test:[2,3,8],text:[],than:3,them:[2,3,4,8],thi:[2,3,4,6,8],thoroughli:[2,8],three:[],threetonebytecod:[],through:[],thrown:[],tight:[],time:3,timeout:3,tone:[2,8],toneplai:[2,8],too:3,topline:[],touch:4,transfer:[],tricki:3,trust:[],turn:[2,3,4,8],turn_ratio:[],turnratio:3,two:3,type:[2,3,4,8],uireadlbatt:[],uireadvbatt:[],ultrason:4,und:3,undefin:4,unexpect:3,unit:[],unknown:4,unknown_error:[],unknown_handle:[],until:3,updat:[],update:[],upload:[],usb:[],use:3,user:[2,8],valid:[],valu:[2,3,4,6,8],value:[],varargin:[2,3,4,8],variabl:[],variou:6,via:[2,3,4,6,8],view:[2,8],virtual:[2,8],visibl:[],vmthreadheader:[],voltag:[2,3,8],volum:[2,8],wai:6,wait:[],waitfor:[2,3,8],want:6,wast:3,weird:3,wfaddr:[],wfport:[],wfsn:[],what:[2,3,4,8],whatev:3,when:[2,3,8],whether:[],which:[3,4],white:4,wide:[],wifi:[],without:3,wordtobyt:[],work:[2,3,4,8],workaround:3,would:3,wrap:[2,8],writable:[2,3,4,8],write:[],writemailbox:[],wrong:[2,8],yet:[2,8],you:[3,4,6],your:6,zero:[]},titles:["CommandLayer","CommunicationLayer","EV3","Motor","Sensor","Examples","MATLAB Toolbox for controlling Lego Mindstorms EV3","General","EV3"],titleterms:{bluetooth:1,command:0,commandlay:0,communicationinterfac:0,communicationlay:1,content:6,contribut:7,control:6,ev3:[2,6,8],exampl:5,gener:7,indice:[],inform:[],installat:7,lego:6,licens:7,matlab:6,mindstorm:6,motor:3,sensor:4,tabl:[],toolbox:6,usb:1}}) \ No newline at end of file +Search.setIndex({envversion:49,filenames:["CommandLayer","CommunicationLayer","EV3","Motor","Sensor","examples","index","readme","source"],objects:{"":{source:[8,0,1,""]},"source.EV3":{batteryMode:[8,2,1,""],batteryValue:[8,2,1,""],beep:[8,3,1,""],connect:[8,3,1,""],debug:[8,2,1,""],disconnect:[8,3,1,""],isConnected:[8,2,1,""],motorA:[8,2,1,""],motorB:[8,2,1,""],motorC:[8,2,1,""],motorD:[8,2,1,""],playTone:[8,3,1,""],sensor1:[8,2,1,""],sensor2:[8,2,1,""],sensor3:[8,2,1,""],sensor4:[8,2,1,""],setProperties:[8,3,1,""],stopAllMotors:[8,3,1,""],stopTone:[8,3,1,""],tonePlayed:[8,3,1,""]},"source.Motor":{brakeMode:[3,2,1,""],currentSpeed:[3,2,1,""],debug:[3,2,1,""],internalReset:[3,3,1,""],isRunning:[3,2,1,""],limitMode:[3,2,1,""],limitValue:[3,2,1,""],power:[3,2,1,""],resetTachoCount:[3,3,1,""],setBrake:[3,3,1,""],setProperties:[3,3,1,""],smoothStart:[3,2,1,""],smoothStop:[3,2,1,""],speedRegulation:[3,2,1,""],start:[3,3,1,""],stop:[3,3,1,""],syncedStart:[3,3,1,""],syncedStop:[3,3,1,""],tachoCount:[3,2,1,""],type:[3,2,1,""],waitFor:[3,3,1,""]},"source.Sensor":{debug:[4,2,1,""],mode:[4,2,1,""],reset:[4,3,1,""],setProperties:[4,3,1,""],type:[4,2,1,""],value:[4,2,1,""]},source:{EV3:[8,1,1,""],Motor:[3,1,1,""],Sensor:[4,1,1,""]}},objnames:{"0":["mat","module","MATLAB module"],"1":["mat","class","MATLAB class"],"2":["mat","attribute","MATLAB attribute"],"3":["mat","method","MATLAB method"]},objtypes:{"0":"mat:module","1":"mat:class","2":"mat:attribute","3":"mat:method"},terms:{"2nd":[2,3,4,8],"5000hz":[2,8],"abstract":6,"case":3,"catch":3,"class":[2,3,4,6,8],"default":4,"function":3,"long":3,"return":[2,3,8],"true":[2,3,8],"try":3,"while":6,aachen:6,abl:6,about:[2,3,4,8],acceler:[3,4],accelerationallax:4,access:6,accident:[2,8],act:3,action:3,actual:3,advanc:6,affect:3,after:3,afterward:3,again:3,all:[2,3,4,8],allow:4,alreadi:[],also:[2,3,4,8],alternatingli:[],ambient:4,angular:4,ani:3,announc:[2,3,4,8],anoth:3,apply:3,aren:3,argument:[2,3,4,8],around:3,automat:[2,3,4,8],avail:4,batteri:[2,8],batterymod:[2,3,8],batterymode:[2,8],batteryvalu:[2,8],been:[2,3,4,8],beep:[2,5,8],befor:[],behav:3,behaviour:6,better:3,between:3,bit:3,blue:4,bool:[2,3,4,8],both:3,brake:3,brakemod:3,brakemode:3,brick:[2,3,4,6,8],brickobject:[2,3,4,8],buggi:[],bump:4,c_output:3,call:[2,3,4,8],can:[3,4,6],car:3,central:[2,8],chang:3,charg:[2,8],check:3,clear:4,coast:3,code:4,col:4,color:4,com:[2,8],comm:[],comment:3,commun:[3,4,6],connect:[2,3,4,5,8],connectiontyp:[2,8],consist:[3,4],consol:[2,3,4,8],constantli:3,contain:[2,3,4,8],continu:3,contribut:[],control:[],conveni:[2,8],correctli:3,count:3,counter:3,cours:3,creat:[2,3,4,8],current:[2,3,4,8],currentspe:3,dba:4,debug:[2,3,4,8],defin:3,degre:[3,4],delet:[2,5,8],deliv:[2,8],depend:[2,3,4,8],design:6,destroi:[2,8],dev:[2,3,4,8],develop:6,devic:3,devicemod:4,devicetyp:[3,4],differ:[2,8],direct:3,directli:6,disconnect:[2,8],disp:[2,5,8],distcm:4,distin:4,document:6,doe:[2,3,8],doesn:[],don:[3,4],done:3,down:3,durat:[2,8],each:[2,3,4,8],eas:3,easili:6,either:[2,3,8],enabl:[2,8],equal:[2,3,8],error:[3,4],establish:[2,8],even:3,everytim:[3,4],exampl:[],execut:3,expect:[2,5,8],facilit:4,fals:3,far:3,feedback:[2,3,4,8],finish:3,firmwar:[2,3,8],first:[2,3,8],follow:[2,3,4,6,8],forward:3,four:3,frequenc:[2,8],from:[2,3,4,8],fun:[2,5,8],gener:[],germani:6,get:[2,3,6,8],given:[2,3,4,8],glanc:[2,8],goe:3,greater:3,green:4,gyro:4,happen:3,have:[2,3,8],heavi:3,here:3,hertz:[2,8],high:[2,3,4,6,8],highest:3,hold:3,how:3,htacceleromet:4,htcolor:4,htcompass:4,hysic:4,imag:[],immedi:[2,3,8],indic:3,individu:[3,4],infinit:3,infrare:4,input:[2,3,4,8],inputpars:[2,3,4,8],instal:6,installat:[],instanc:[3,4],instantan:[2,8],instead:[2,3,4,8],instruct:6,interfac:[2,8],intern:3,internalreset:3,interpret:3,intuit:6,isconnect:[2,8],isconnected:[2,8],isrun:3,iter:[],itself:[],keep:3,kind:3,lab:6,largemotor:4,last:3,later:[],layer:[3,4,6],lead:[],left:3,less:3,level:[2,3,4,6,8],licens:[],like:3,limit:3,limitmod:3,limitvalu:[2,3,5,8],listen:4,load:3,look:6,loop:3,low:[2,6,8],lower:3,mai:[2,3,4,8],mainli:4,make:3,mark:[2,3,4,8],master:3,matlab:[],mean:3,mediummotor:4,meet:6,messag:3,method:[2,3,4,8],millisecond:[2,3,8],mind:3,mode:[2,3,4,8],mostli:[3,6],motor:[],motora:[2,3,4,5,8],motorb:[2,3,8],motorc:[2,8],motord:[2,8],move:3,multipl:[2,3,4,8],name:[2,3,4,8],necessari:[2,8],need:[2,3,4,8],neg:3,next:3,none:4,note:[2,3,4,8],now:4,numer:[2,3,4,8],nxt:6,nxtcolor:4,nxtlight:4,nxtsound:4,nxttemperatur:4,nxttouch:4,nxtultrason:4,object:[2,3,4,8],off:[2,3,4,8],old:[],onc:[2,3,4,8],once:4,onli:[],only:[2,3,4,8],opcod:3,opposit:3,option:[2,3,4,8],optional:[2,3,4,8],other:[3,4],otherwis:3,output:[2,8],outputreadi:3,outputtest:[],packet:[2,3,8],paramet:[2,3,4,8],part:6,pass:[3,4],path:[2,8],paus:[2,8],percent:[2,3,8],percentag:[2,3,8],physic:[2,3,4,8],plai:[2,8],playton:[2,8],point:3,poll:3,port:[2,3,4,5,8],posit:3,possibl:[3,4],power:[2,3,4,5,8],preced:[2,3,4,8],pretti:3,previous:3,print:[2,8],probabl:3,program:3,properti:[2,3,4,8],prox:4,pull:3,push:4,rais:3,random:[2,5,8],rate:4,ratio:3,raw:4,reach:3,read:[2,3,4,6,8],reason:3,receiv:[2,3,8],red:4,reflect:4,regul:3,regular:3,releas:3,remot:4,repli:3,repres:[3,4],request:3,reset:[3,4],resetposit:3,resettachocount:3,respect:3,respons:3,result:3,rfcomm0:[2,3,4,8],rfcomm1:[2,8],rfcomm2:[2,8],right:[3,4],robot:[3,6],run:3,rwth:6,same:3,second:[2,8],secur:3,see:[2,3,4,8],seek:4,seem:[2,8],send:[2,3,6,8],sensor1:[2,4,5,8],sensor2:[2,8],sensor3:[2,8],sensor4:[2,8],sensor:[],sent:[2,8],serial:[2,8],serport:[2,3,4,8],set:[2,3,4,6,8],setbrak:3,setproperti:[2,3,4,5,8],setup:[2,8],sever:6,should:3,simplifi:6,slave:3,slow:3,slower:3,slowli:3,small:[2,8],smoothli:3,smoothstart:3,smoothstop:3,some:3,sometim:[],somewhat:3,sooner:[],sourc:[2,3,4,8],specifi:[3,4],speed:3,speedregul:3,spin:3,start:[2,3,5,6,8],state:3,statu:[2,3,8],still:3,stop:[2,3,8],stopallmotor:[2,8],stopton:[2,8],straight:3,string:[2,3,4,8],student:6,stuff:[2,3,8],sublay:[3,4],suppos:3,sync:3,syncedstart:3,syncedstop:3,synchron:3,syncmotor:3,syntax:[2,3,4,8],tacho:3,tachocount:3,tacholimit:3,take:[3,6],test:[2,3,8],than:3,them:[2,3,4,8],thi:[2,3,4,5,6,8],thoroughli:[2,8],time:3,timeout:3,tone:[2,8],toneplai:[2,8],too:3,toolbox:[],touch:4,tricki:3,turn:[2,3,4,8],turnratio:3,two:3,type:[2,3,4,8],ultrason:4,und:3,undefin:4,unexpect:[],unknown:4,until:3,use:3,user:[2,8],valu:[2,3,4,5,6,8],varargin:[2,3,4,8],variou:6,via:[2,3,4,6,8],view:[2,8],virtual:[2,8],voltag:[2,3,8],volum:[2,8],wai:6,waitfor:[2,3,5,8],want:6,wast:3,weird:3,what:[2,3,4,8],whatev:3,when:[2,3,4,8],which:[2,3,4,8],white:4,without:3,work:[2,3,4,8],workaround:3,would:[2,3,4,8],wrap:[],writable:[2,3,4,8],wrong:[2,8],yet:[2,8],you:[3,4,6],your:6},titles:["CommandLayer","CommunicationLayer","EV3","Motor","Sensor","Examples","MATLAB Toolbox for controlling Lego Mindstorms EV3","General","EV3"],titleterms:{bluetooth:1,command:0,commandlay:0,communicationinterfac:0,communicationlay:1,content:6,contribut:7,control:6,ev3:[2,6,8],exampl:5,gener:7,installat:7,lego:6,licens:7,matlab:6,mindstorm:6,motor:3,sensor:4,toolbox:6,usb:1}}) \ No newline at end of file diff --git a/docs/_build/html/source.html b/docs/_build/html/source.html index 2e5acbc979fbd5a766fc31941b7b374fd45f5847..2a43839969e7b7b44e135e3994ee70b8436ae1e3 100644 --- a/docs/_build/html/source.html +++ b/docs/_build/html/source.html @@ -143,53 +143,57 @@ commands to it. An EV3-object creates 4 Motor- and 4 Sensor-objects, one for eac <ul class="simple"> <li>Creating multiple EV3 objects and connecting them to different physical bricks has not been thoroughly tested yet, but seems to work on a first glance.</li> +<li>When an input argument of a method is marked as optional, the argument needs to be +‘announced’ by a preceding 2nd argument, which is a string containing the name of the argument. +For example, Motor.setProperties may be given a power-parameter. The syntax would be as +follows: <em>brickObject.motorA.setProperties(‘power’, 50);</em></li> </ul> <dl class="attribute"> <dt id="source.EV3.motorA"> <code class="descname">motorA</code><a class="headerlink" href="#source.EV3.motorA" title="Permalink to this definition">¶</a></dt> -<dd><p><em>Motor</em> – Motor-object interfacing port A</p> +<dd><p><em>Motor</em> – Motor-object interfacing port A. See also <a class="reference internal" href="Motor.html#source.Motor" title="source.Motor"><code class="xref mat mat-class docutils literal"><span class="pre">Motor</span></code></a>.</p> </dd></dl> <dl class="attribute"> <dt id="source.EV3.motorB"> <code class="descname">motorB</code><a class="headerlink" href="#source.EV3.motorB" title="Permalink to this definition">¶</a></dt> -<dd><p><em>Motor</em> – Motor-object interfacing port B</p> +<dd><p><em>Motor</em> – Motor-object interfacing port B. See also <a class="reference internal" href="Motor.html#source.Motor" title="source.Motor"><code class="xref mat mat-class docutils literal"><span class="pre">Motor</span></code></a>.</p> </dd></dl> <dl class="attribute"> <dt id="source.EV3.motorC"> <code class="descname">motorC</code><a class="headerlink" href="#source.EV3.motorC" title="Permalink to this definition">¶</a></dt> -<dd><p><em>Motor</em> – Motor-object interfacing port C</p> +<dd><p><em>Motor</em> – Motor-object interfacing port C. See also <a class="reference internal" href="Motor.html#source.Motor" title="source.Motor"><code class="xref mat mat-class docutils literal"><span class="pre">Motor</span></code></a>.</p> </dd></dl> <dl class="attribute"> <dt id="source.EV3.motorD"> <code class="descname">motorD</code><a class="headerlink" href="#source.EV3.motorD" title="Permalink to this definition">¶</a></dt> -<dd><p><em>Motor</em> – Motor-object interfacing port D</p> +<dd><p><em>Motor</em> – Motor-object interfacing port D. See also <a class="reference internal" href="Motor.html#source.Motor" title="source.Motor"><code class="xref mat mat-class docutils literal"><span class="pre">Motor</span></code></a>.</p> </dd></dl> <dl class="attribute"> <dt id="source.EV3.sensor1"> <code class="descname">sensor1</code><a class="headerlink" href="#source.EV3.sensor1" title="Permalink to this definition">¶</a></dt> -<dd><p><em>Sensor</em> – Motor-object interfacing port 1</p> +<dd><p><em>Sensor</em> – Motor-object interfacing port 1. See also <a class="reference internal" href="Sensor.html#source.Sensor" title="source.Sensor"><code class="xref mat mat-class docutils literal"><span class="pre">Sensor</span></code></a>.</p> </dd></dl> <dl class="attribute"> <dt id="source.EV3.sensor2"> <code class="descname">sensor2</code><a class="headerlink" href="#source.EV3.sensor2" title="Permalink to this definition">¶</a></dt> -<dd><p><em>Sensor</em> – Motor-object interfacing port 2</p> +<dd><p><em>Sensor</em> – Motor-object interfacing port 2. See also <a class="reference internal" href="Sensor.html#source.Sensor" title="source.Sensor"><code class="xref mat mat-class docutils literal"><span class="pre">Sensor</span></code></a>.</p> </dd></dl> <dl class="attribute"> <dt id="source.EV3.sensor3"> <code class="descname">sensor3</code><a class="headerlink" href="#source.EV3.sensor3" title="Permalink to this definition">¶</a></dt> -<dd><p><em>Sensor</em> – Motor-object interfacing port 3</p> +<dd><p><em>Sensor</em> – Motor-object interfacing port 3. See also <a class="reference internal" href="Sensor.html#source.Sensor" title="source.Sensor"><code class="xref mat mat-class docutils literal"><span class="pre">Sensor</span></code></a>.</p> </dd></dl> <dl class="attribute"> <dt id="source.EV3.sensor4"> <code class="descname">sensor4</code><a class="headerlink" href="#source.EV3.sensor4" title="Permalink to this definition">¶</a></dt> -<dd><p><em>Sensor</em> – Motor-object interfacing port 4</p> +<dd><p><em>Sensor</em> – Motor-object interfacing port 4. See also <a class="reference internal" href="Sensor.html#source.Sensor" title="source.Sensor"><code class="xref mat mat-class docutils literal"><span class="pre">Sensor</span></code></a>.</p> </dd></dl> <dl class="attribute"> @@ -206,15 +210,13 @@ been thoroughly tested yet, but seems to work on a first glance.</li> <dl class="attribute"> <dt id="source.EV3.batteryMode"> <code class="descname">batteryMode</code><a class="headerlink" href="#source.EV3.batteryMode" title="Permalink to this definition">¶</a></dt> -<dd><p><em>string in {‘Percentage’, ‘Voltage’}</em> – Mode for reading battery charge. -<em>[WRITABLE]</em></p> +<dd><p><em>string in {‘Percentage’, ‘Voltage’}</em> – Mode for reading battery charge. See also <a class="reference internal" href="#source.EV3.batteryValue" title="source.EV3.batteryValue"><code class="xref mat mat-attr docutils literal"><span class="pre">batteryValue</span></code></a>. <em>[WRITABLE]</em></p> </dd></dl> <dl class="attribute"> <dt id="source.EV3.batteryValue"> <code class="descname">batteryValue</code><a class="headerlink" href="#source.EV3.batteryValue" title="Permalink to this definition">¶</a></dt> -<dd><p><em>numeric</em> – Current battery charge. Depending on batteryMode, the reading -is either in percentage or voltage. <em>[READ-ONLY]</em></p> +<dd><p><em>numeric</em> – Current battery charge. Depending on batteryMode, the reading is either in percentage or voltage. See also <a class="reference internal" href="#source.EV3.batteryMode" title="source.EV3.batteryMode"><code class="xref mat mat-attr docutils literal"><span class="pre">batteryMode</span></code></a>. <em>[READ-ONLY]</em></p> </dd></dl> <dl class="attribute"> @@ -223,29 +225,30 @@ is either in percentage or voltage. <em>[READ-ONLY]</em></p> <dd><p><em>bool</em> – True if virtual brick-object is connected to physical one. <em>[READ-ONLY]</em></p> </dd></dl> -<p class="rubric">Examples</p> -<p>b = EV3(); <br /> -b.connect(‘usb’); <br /> -ma = b.motorA; <br /> -ma.setProperties(‘power’, 50, ‘limitValue’, 720); <br /> -ma.start(); <br /> +<p class="rubric">Example</p> +<p>% This example expects a motor at port A and a (random) sensor at port 1 <br /> +b = EV3(); % <br /> +b.connect(‘usb’); % <br /> +ma = b.motorA; % <br /> +ma.setProperties(‘power’, 50, ‘limitValue’, 720); % <br /> +ma.start(); % <br /> % fun <br /> -b.sensor1.value <br /> -b.waitFor(); <br /> -b.beep(); <br /> -delete b; <br /></p> +ma.waitFor(); % <br /> +disp(b.sensor1.value); % <br /> +b.beep(); % <br /> +delete b; % <br /></p> <dl class="method"> <dt id="source.EV3.beep"> <code class="descname">beep</code><span class="sig-paren">(</span><em>ev3</em><span class="sig-paren">)</span><a class="headerlink" href="#source.EV3.beep" title="Permalink to this definition">¶</a></dt> <dd><p>Plays a ‘beep’-tone on brick.</p> <p class="rubric">Notes</p> <ul class="simple"> -<li>This equals playTone(10, 1000, 100) (Wraps the same opCode in comm-layer)</li> +<li>This equals playTone(10, 1000, 100).</li> </ul> <p class="rubric">Example</p> -<p>b = EV3(); <br /> -b.connect(‘bt’, ‘serPort’, ‘/dev/rfcomm0’); <br /> -b.beep(); <br /></p> +<p>b = EV3(); % <br /> +b.connect(‘bt’, ‘serPort’, ‘/dev/rfcomm0’); % <br /> +b.beep(); % <br /></p> </dd></dl> <dl class="method"> @@ -259,21 +262,21 @@ b.beep(); <br /></p> <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple"> <li><strong>connectionType</strong> (<em>string in {'bt', 'usb'}</em>) – Connection type</li> <li><strong>serPort</strong> (<em>string in {'/dev/rfcomm1', '/dev/rfcomm2', ...}</em>) – Path to serial port -(if ‘bt’)</li> -<li><strong>beep</strong> (<em>bool</em>) – If true, EV3 beeps if connection has been established</li> +(necessary if connectionType is ‘bt’). <em>[OPTIONAL]</em></li> +<li><strong>beep</strong> (<em>bool</em>) – If true, EV3 beeps if connection has been established. <em>[OPTIONAL]</em></li> </ul> </td> </tr> </tbody> </table> -<p class="rubric">Examples</p> +<p class="rubric">Example</p> <p>% Setup bluetooth connection via com-port 0 <br /> -b = EV3(); <br /> -b.connect(‘bt’, ‘serPort’, ‘/dev/rfcomm0’); <br /> +b = EV3(); % <br /> +b.connect(‘bt’, ‘serPort’, ‘/dev/rfcomm0’); % <br /> % Setup usb connection, beep when connection has been established -b = EV3(); <br /> -b.connect(‘usb’, ‘beep’, ‘on’, ); <br /></p> -<p>Check connection</p> +b = EV3(); % <br /> +b.connect(‘usb’, ‘beep’, ‘on’, ); % <br /></p> +<p>See also ISCONNECTED / <a class="reference internal" href="#source.EV3.isConnected" title="source.EV3.isConnected"><code class="xref mat mat-attr docutils literal"><span class="pre">isConnected</span></code></a></p> </dd></dl> <dl class="method"> @@ -285,11 +288,10 @@ b.connect(‘usb’, ‘beep’, ‘on’, ); <br /></p> <li>Gets called automatically when EV3-object is destroyed.</li> </ul> <p class="rubric">Example</p> -<p>b = EV3(); -b.connect(‘bt’, ‘serPort’, ‘/dev/rfcomm0’); -% do stuff -b.disconnect();</p> -<p>Reset motors and sensors before disconnecting</p> +<p>b = EV3(); % <br /> +b.connect(‘bt’, ‘serPort’, ‘/dev/rfcomm0’); % <br /> +% do stuff <br /> +b.disconnect(); % <br /></p> </dd></dl> <dl class="method"> @@ -310,8 +312,8 @@ b.disconnect();</p> </tbody> </table> <p class="rubric">Example</p> -<p>b = EV3(); <br /> -b.connect(‘bt’, ‘serPort’, ‘/dev/rfcomm0’); <br /> +<p>b = EV3(); % <br /> +b.connect(‘bt’, ‘serPort’, ‘/dev/rfcomm0’); % <br /> b.playTone(40, 5000, 1000); % Plays tone with 40% volume and 5000Hz for 1 second. <br /></p> </dd></dl> @@ -333,26 +335,26 @@ second. <br /></p> </tbody> </table> <p class="rubric">Example</p> -<p>b = EV3(); <br /> -b.connect(‘bt’, ‘serPort’, ‘/dev/rfcomm0’); <br /> -b.setProperties(‘debug’, ‘on’, ‘batteryMode’, ‘Voltage’); <br /> -% Instead of: b.debug = ‘on’; b.batteryMode = ‘Voltage’; <br /></p> -<p>See also EV3.DEBUG, EV3.BATTERYMODE</p> +<p>b = EV3(); % <br /> +b.connect(‘bt’, ‘serPort’, ‘/dev/rfcomm0’); % <br /> +b.setProperties(‘debug’, ‘on’, ‘batteryMode’, ‘Voltage’); % <br /> +% Instead of: b.debug = ‘on’; b.batteryMode = ‘Voltage’; % <br /></p> +<p>See also EV3.DEBUG, EV3.BATTERYMODE / <a class="reference internal" href="#source.EV3.debug" title="source.EV3.debug"><code class="xref mat mat-attr docutils literal"><span class="pre">debug</span></code></a>, <a class="reference internal" href="#source.EV3.batteryMode" title="source.EV3.batteryMode"><code class="xref mat mat-attr docutils literal"><span class="pre">batteryMode</span></code></a></p> </dd></dl> <dl class="method"> <dt id="source.EV3.stopAllMotors"> <code class="descname">stopAllMotors</code><span class="sig-paren">(</span><em>ev3</em><span class="sig-paren">)</span><a class="headerlink" href="#source.EV3.stopAllMotors" title="Permalink to this definition">¶</a></dt> -<dd><p>Sends a stop-command to all motor-ports</p> +<dd><p>Sends a stop-command to all motor-ports.</p> </dd></dl> <dl class="method"> <dt id="source.EV3.stopTone"> <code class="descname">stopTone</code><span class="sig-paren">(</span><em>ev3</em><span class="sig-paren">)</span><a class="headerlink" href="#source.EV3.stopTone" title="Permalink to this definition">¶</a></dt> -<dd><p>Stops tone currently played</p> +<dd><p>Stops tone currently played.</p> <p class="rubric">Example</p> -<p>b = EV3(); <br /> -b.connect(‘bt’, ‘serPort’, ‘/dev/rfcomm0’); <br /> +<p>b = EV3(); % <br /> +b.connect(‘bt’, ‘serPort’, ‘/dev/rfcomm0’); % <br /> b.playTone(10,100,100000000); % Accidentally given wrong tone duration :) <br /> b.stopTone(); % Stops tone immediately. <br /></p> </dd></dl> @@ -373,11 +375,11 @@ b.stopTone(); % Stops tone immediately. <br /></p> </table> <dl class="docutils"> <dt>Example</dt> -<dd>b = EV3(); <br /> -b.connect(‘bt’, ‘serPort’, ‘/dev/rfcomm0’); <br /> -b.playTone(10, 100, 1000); <br /> -pause(0.5); <br /> -b.tonePlayed() -> Outputs 1 to console. <br /></dd> +<dd>b = EV3(); % <br /> +b.connect(‘bt’, ‘serPort’, ‘/dev/rfcomm0’); % <br /> +b.playTone(10, 100, 1000); % <br /> +pause(0.5); % Small pause is necessary as tone does not start instantaneously <br /> +b.tonePlayed(); % -> Outputs 1 to console. <br /></dd> </dl> </dd></dl> diff --git a/docs/_build/latex/Makefile b/docs/_build/latex/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..d748006ccff3a3d251428d6e3398c6816f6511d2 --- /dev/null +++ b/docs/_build/latex/Makefile @@ -0,0 +1,78 @@ +# Makefile for Sphinx LaTeX output + +ALLDOCS = $(basename $(wildcard *.tex)) +ALLPDF = $(addsuffix .pdf,$(ALLDOCS)) +ALLDVI = $(addsuffix .dvi,$(ALLDOCS)) + +# Prefix for archive names +ARCHIVEPRREFIX = +# Additional LaTeX options +LATEXOPTS = +# format: pdf or dvi +FMT = pdf + +LATEX = latex +PDFLATEX = pdflatex +MAKEINDEX = makeindex + +all: $(ALLPDF) +all-pdf: $(ALLPDF) +all-dvi: $(ALLDVI) +all-ps: all-dvi + for f in *.dvi; do dvips $$f; done + +all-pdf-ja: + for f in *.pdf *.png *.gif *.jpg *.jpeg; do extractbb $$f; done + for f in *.tex; do platex -kanji=utf8 $(LATEXOPTS) $$f; done + for f in *.tex; do platex -kanji=utf8 $(LATEXOPTS) $$f; done + for f in *.tex; do platex -kanji=utf8 $(LATEXOPTS) $$f; done + -for f in *.idx; do mendex -U -f -d "`basename $$f .idx`.dic" -s python.ist $$f; done + for f in *.tex; do platex -kanji=utf8 $(LATEXOPTS) $$f; done + for f in *.tex; do platex -kanji=utf8 $(LATEXOPTS) $$f; done + for f in *.dvi; do dvipdfmx $$f; done + +zip: all-$(FMT) + mkdir $(ARCHIVEPREFIX)docs-$(FMT) + cp $(ALLPDF) $(ARCHIVEPREFIX)docs-$(FMT) + zip -q -r -9 $(ARCHIVEPREFIX)docs-$(FMT).zip $(ARCHIVEPREFIX)docs-$(FMT) + rm -r $(ARCHIVEPREFIX)docs-$(FMT) + +tar: all-$(FMT) + mkdir $(ARCHIVEPREFIX)docs-$(FMT) + cp $(ALLPDF) $(ARCHIVEPREFIX)docs-$(FMT) + tar cf $(ARCHIVEPREFIX)docs-$(FMT).tar $(ARCHIVEPREFIX)docs-$(FMT) + rm -r $(ARCHIVEPREFIX)docs-$(FMT) + +gz: tar + gzip -9 < $(ARCHIVEPREFIX)docs-$(FMT).tar > $(ARCHIVEPREFIX)docs-$(FMT).tar.gz + +bz2: tar + bzip2 -9 -k $(ARCHIVEPREFIX)docs-$(FMT).tar + +xz: tar + xz -9 -k $(ARCHIVEPREFIX)docs-$(FMT).tar + +# The number of LaTeX runs is quite conservative, but I don't expect it +# to get run often, so the little extra time won't hurt. +%.dvi: %.tex + $(LATEX) $(LATEXOPTS) '$<' + $(LATEX) $(LATEXOPTS) '$<' + $(LATEX) $(LATEXOPTS) '$<' + -$(MAKEINDEX) -s python.ist '$(basename $<).idx' + $(LATEX) $(LATEXOPTS) '$<' + $(LATEX) $(LATEXOPTS) '$<' + +%.pdf: %.tex + $(PDFLATEX) $(LATEXOPTS) '$<' + $(PDFLATEX) $(LATEXOPTS) '$<' + $(PDFLATEX) $(LATEXOPTS) '$<' + -$(MAKEINDEX) -s python.ist '$(basename $<).idx' + $(PDFLATEX) $(LATEXOPTS) '$<' + $(PDFLATEX) $(LATEXOPTS) '$<' + +clean: + rm -f *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla *.ps *.tar *.tar.gz *.tar.bz2 *.tar.xz $(ALLPDF) $(ALLDVI) + +.PHONY: all all-pdf all-dvi all-ps clean zip tar gz bz2 xz +.PHONY: all-pdf-ja + diff --git a/docs/_build/latex/MindstormsEV3Toolbox.aux b/docs/_build/latex/MindstormsEV3Toolbox.aux new file mode 100644 index 0000000000000000000000000000000000000000..767dbc5a5ce759ea0f68f8deb5188b2ba65a08f3 --- /dev/null +++ b/docs/_build/latex/MindstormsEV3Toolbox.aux @@ -0,0 +1,143 @@ +\relax +\providecommand\hyper@newdestlabel[2]{} +\providecommand\HyperFirstAtBeginDocument{\AtBeginDocument} +\HyperFirstAtBeginDocument{\ifx\hyper@anchor\@undefined +\global\let\oldcontentsline\contentsline +\gdef\contentsline#1#2#3#4{\oldcontentsline{#1}{#2}{#3}} +\global\let\oldnewlabel\newlabel +\gdef\newlabel#1#2{\newlabelxx{#1}#2} +\gdef\newlabelxx#1#2#3#4#5#6{\oldnewlabel{#1}{{#2}{#3}}} +\AtEndDocument{\ifx\hyper@anchor\@undefined +\let\contentsline\oldcontentsline +\let\newlabel\oldnewlabel +\fi} +\fi} +\global\let\hyper@last\relax +\gdef\HyperFirstAtBeginDocument#1{#1} +\providecommand\HyField@AuxAddToFields[1]{} +\providecommand\HyField@AuxAddToCoFields[2]{} +\select@language{english} +\@writefile{toc}{\select@language{english}} +\@writefile{lof}{\select@language{english}} +\@writefile{lot}{\select@language{english}} +\newlabel{index::doc}{{}{1}{}{section*.2}{}} +\@writefile{toc}{\contentsline {chapter}{\numberline {1}Contents}{3}{chapter.1}} +\@writefile{lof}{\addvspace {10\p@ }} +\@writefile{lot}{\addvspace {10\p@ }} +\@writefile{loliteral-block}{\addvspace {10\p@ }} +\newlabel{index:matlab-nxt-toolbox}{{1}{3}{Contents}{chapter.1}{}} +\newlabel{index:contents}{{1}{3}{Contents}{chapter.1}{}} +\newlabel{index:matlab-toolbox-for-controlling-lego-mindstorms-ev3}{{1}{3}{Contents}{chapter.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.1}General}{3}{section.1.1}} +\newlabel{readme::doc}{{1.1}{3}{General}{section.1.1}{}} +\newlabel{readme:general}{{1.1}{3}{General}{section.1.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {1.1.1}Installation}{3}{subsection.1.1.1}} +\newlabel{readme:installation}{{1.1.1}{3}{Installation}{subsection.1.1.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {1.1.2}Contribution}{3}{subsection.1.1.2}} +\newlabel{readme:contribution}{{1.1.2}{3}{Contribution}{subsection.1.1.2}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {1.1.3}Licenses}{3}{subsection.1.1.3}} +\newlabel{readme:licenses}{{1.1.3}{3}{Licenses}{subsection.1.1.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.2}Examples}{3}{section.1.2}} +\newlabel{examples::doc}{{1.2}{3}{Examples}{section.1.2}{}} +\newlabel{examples:examples}{{1.2}{3}{Examples}{section.1.2}{}} +\newlabel{EV3:module-source}{{1.2}{3}{Examples}{section*.3}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.3}EV3}{3}{section.1.3}} +\newlabel{EV3:ev3}{{1.3}{3}{EV3}{section.1.3}{}} +\newlabel{EV3::doc}{{1.3}{3}{EV3}{section.1.3}{}} +\newlabel{EV3:source.EV3}{{1.3}{3}{EV3}{section*.4}{}} +\@writefile{toc}{\contentsline {paragraph}{Notes}{4}{paragraph*.5}} +\newlabel{EV3:source.EV3.motorA}{{1.3}{4}{Notes}{section*.6}{}} +\newlabel{EV3:source.EV3.motorB}{{1.3}{4}{Notes}{section*.7}{}} +\newlabel{EV3:source.EV3.motorC}{{1.3}{4}{Notes}{section*.8}{}} +\newlabel{EV3:source.EV3.motorD}{{1.3}{4}{Notes}{section*.9}{}} +\newlabel{EV3:source.EV3.sensor1}{{1.3}{4}{Notes}{section*.10}{}} +\newlabel{EV3:source.EV3.sensor2}{{1.3}{4}{Notes}{section*.11}{}} +\newlabel{EV3:source.EV3.sensor3}{{1.3}{4}{Notes}{section*.12}{}} +\newlabel{EV3:source.EV3.sensor4}{{1.3}{4}{Notes}{section*.13}{}} +\newlabel{EV3:source.EV3.debug}{{1.3}{4}{Notes}{section*.14}{}} +\newlabel{EV3:source.EV3.batteryMode}{{1.3}{4}{Notes}{section*.15}{}} +\newlabel{EV3:source.EV3.batteryValue}{{1.3}{4}{Notes}{section*.16}{}} +\newlabel{EV3:source.EV3.isConnected}{{1.3}{4}{Notes}{section*.17}{}} +\@writefile{toc}{\contentsline {paragraph}{Example}{4}{paragraph*.18}} +\newlabel{EV3:source.EV3.beep}{{1.3}{4}{Example}{section*.19}{}} +\@writefile{toc}{\contentsline {paragraph}{Notes}{5}{paragraph*.20}} +\@writefile{toc}{\contentsline {paragraph}{Example}{5}{paragraph*.21}} +\newlabel{EV3:source.EV3.connect}{{1.3}{5}{Example}{section*.22}{}} +\@writefile{toc}{\contentsline {paragraph}{Example}{5}{paragraph*.23}} +\newlabel{EV3:source.EV3.disconnect}{{1.3}{5}{Example}{section*.24}{}} +\@writefile{toc}{\contentsline {paragraph}{Notes}{5}{paragraph*.25}} +\@writefile{toc}{\contentsline {paragraph}{Example}{5}{paragraph*.26}} +\newlabel{EV3:source.EV3.playTone}{{1.3}{5}{Example}{section*.27}{}} +\@writefile{toc}{\contentsline {paragraph}{Example}{6}{paragraph*.28}} +\newlabel{EV3:source.EV3.setProperties}{{1.3}{6}{Example}{section*.29}{}} +\@writefile{toc}{\contentsline {paragraph}{Example}{6}{paragraph*.30}} +\newlabel{EV3:source.EV3.stopAllMotors}{{1.3}{6}{Example}{section*.31}{}} +\newlabel{EV3:source.EV3.stopTone}{{1.3}{6}{Example}{section*.32}{}} +\@writefile{toc}{\contentsline {paragraph}{Example}{6}{paragraph*.33}} +\newlabel{EV3:source.EV3.tonePlayed}{{1.3}{6}{Example}{section*.34}{}} +\newlabel{Motor:module-source}{{1.3}{6}{EV3}{section*.35}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.4}Motor}{6}{section.1.4}} +\newlabel{Motor::doc}{{1.4}{6}{Motor}{section.1.4}{}} +\newlabel{Motor:motor}{{1.4}{6}{Motor}{section.1.4}{}} +\newlabel{Motor:source.Motor}{{1.4}{6}{Motor}{section*.36}{}} +\@writefile{toc}{\contentsline {paragraph}{Notes}{7}{paragraph*.37}} +\newlabel{Motor:source.Motor.power}{{1.4}{7}{Notes}{section*.38}{}} +\newlabel{Motor:source.Motor.speedRegulation}{{1.4}{7}{Notes}{section*.39}{}} +\newlabel{Motor:source.Motor.smoothStart}{{1.4}{7}{Notes}{section*.40}{}} +\newlabel{Motor:source.Motor.smoothStop}{{1.4}{7}{Notes}{section*.41}{}} +\newlabel{Motor:source.Motor.limitValue}{{1.4}{7}{Notes}{section*.42}{}} +\newlabel{Motor:source.Motor.limitMode}{{1.4}{7}{Notes}{section*.43}{}} +\newlabel{Motor:source.Motor.brakeMode}{{1.4}{7}{Notes}{section*.44}{}} +\newlabel{Motor:source.Motor.debug}{{1.4}{7}{Notes}{section*.45}{}} +\newlabel{Motor:source.Motor.isRunning}{{1.4}{7}{Notes}{section*.46}{}} +\newlabel{Motor:source.Motor.tachoCount}{{1.4}{7}{Notes}{section*.47}{}} +\newlabel{Motor:source.Motor.currentSpeed}{{1.4}{7}{Notes}{section*.48}{}} +\newlabel{Motor:source.Motor.type}{{1.4}{7}{Notes}{section*.49}{}} +\newlabel{Motor:source.Motor.internalReset}{{1.4}{8}{Notes}{section*.50}{}} +\@writefile{toc}{\contentsline {paragraph}{Notes}{8}{paragraph*.51}} +\newlabel{Motor:source.Motor.resetTachoCount}{{1.4}{8}{Notes}{section*.52}{}} +\newlabel{Motor:source.Motor.setBrake}{{1.4}{8}{Notes}{section*.53}{}} +\@writefile{toc}{\contentsline {paragraph}{Notes}{8}{paragraph*.54}} +\newlabel{Motor:source.Motor.setProperties}{{1.4}{8}{Notes}{section*.55}{}} +\@writefile{toc}{\contentsline {paragraph}{Example}{9}{paragraph*.56}} +\newlabel{Motor:source.Motor.start}{{1.4}{9}{Notes}{section*.57}{}} +\newlabel{Motor:source.Motor.stop}{{1.4}{9}{Notes}{section*.58}{}} +\@writefile{toc}{\contentsline {paragraph}{Notes}{9}{paragraph*.59}} +\newlabel{Motor:source.Motor.syncedStart}{{1.4}{9}{Notes}{section*.60}{}} +\@writefile{toc}{\contentsline {paragraph}{Notes}{9}{paragraph*.61}} +\@writefile{toc}{\contentsline {paragraph}{Example}{9}{paragraph*.62}} +\newlabel{Motor:source.Motor.syncedStop}{{1.4}{9}{Notes}{section*.63}{}} +\@writefile{toc}{\contentsline {paragraph}{Notes}{10}{paragraph*.64}} +\newlabel{Motor:source.Motor.waitFor}{{1.4}{10}{Notes}{section*.65}{}} +\@writefile{toc}{\contentsline {paragraph}{Notes}{10}{paragraph*.66}} +\newlabel{Sensor:module-source}{{1.4}{10}{Motor}{section*.67}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.5}Sensor}{10}{section.1.5}} +\newlabel{Sensor:sensor}{{1.5}{10}{Sensor}{section.1.5}{}} +\newlabel{Sensor::doc}{{1.5}{10}{Sensor}{section.1.5}{}} +\newlabel{Sensor:source.Sensor}{{1.5}{10}{Sensor}{section*.68}{}} +\@writefile{toc}{\contentsline {paragraph}{Notes}{10}{paragraph*.69}} +\newlabel{Sensor:source.Sensor.mode}{{1.5}{10}{Notes}{section*.70}{}} +\newlabel{Sensor:source.Sensor.debug}{{1.5}{12}{Notes}{section*.71}{}} +\newlabel{Sensor:source.Sensor.value}{{1.5}{12}{Notes}{section*.72}{}} +\newlabel{Sensor:source.Sensor.type}{{1.5}{12}{Notes}{section*.73}{}} +\newlabel{Sensor:source.Sensor.reset}{{1.5}{13}{Notes}{section*.74}{}} +\@writefile{toc}{\contentsline {paragraph}{Notes}{13}{paragraph*.75}} +\newlabel{Sensor:source.Sensor.setProperties}{{1.5}{13}{Notes}{section*.76}{}} +\@writefile{toc}{\contentsline {paragraph}{Example}{13}{paragraph*.77}} +\newlabel{CommandLayer:module-source}{{1.5}{13}{Sensor}{section*.78}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.6}CommandLayer}{13}{section.1.6}} +\newlabel{CommandLayer:commandlayer}{{1.6}{13}{CommandLayer}{section.1.6}{}} +\newlabel{CommandLayer::doc}{{1.6}{13}{CommandLayer}{section.1.6}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {1.6.1}Command}{13}{subsection.1.6.1}} +\newlabel{CommandLayer:command}{{1.6.1}{13}{Command}{subsection.1.6.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {1.6.2}CommunicationInterface}{13}{subsection.1.6.2}} +\newlabel{CommandLayer:communicationinterface}{{1.6.2}{13}{CommunicationInterface}{subsection.1.6.2}{}} +\newlabel{CommunicationLayer:module-source}{{1.6.2}{13}{CommunicationInterface}{section*.79}{}} +\@writefile{toc}{\contentsline {section}{\numberline {1.7}CommunicationLayer}{13}{section.1.7}} +\newlabel{CommunicationLayer:communicationlayer}{{1.7}{13}{CommunicationLayer}{section.1.7}{}} +\newlabel{CommunicationLayer::doc}{{1.7}{13}{CommunicationLayer}{section.1.7}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {1.7.1}USB}{13}{subsection.1.7.1}} +\newlabel{CommunicationLayer:usb}{{1.7.1}{13}{USB}{subsection.1.7.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {1.7.2}Bluetooth}{13}{subsection.1.7.2}} +\newlabel{CommunicationLayer:bluetooth}{{1.7.2}{13}{Bluetooth}{subsection.1.7.2}{}} +\@writefile{toc}{\contentsline {chapter}{Index}{15}{section*.80}} diff --git a/docs/_build/latex/MindstormsEV3Toolbox.idx b/docs/_build/latex/MindstormsEV3Toolbox.idx new file mode 100644 index 0000000000000000000000000000000000000000..9dbeb0934d10efd95da254201cc3eec0f9a75951 --- /dev/null +++ b/docs/_build/latex/MindstormsEV3Toolbox.idx @@ -0,0 +1,55 @@ +\indexentry{source (module)|hyperpage}{3} +\indexentry{EV3 (class in source)|hyperpage}{3} +\indexentry{motorA (source.EV3 attribute)|hyperpage}{4} +\indexentry{motorB (source.EV3 attribute)|hyperpage}{4} +\indexentry{motorC (source.EV3 attribute)|hyperpage}{4} +\indexentry{motorD (source.EV3 attribute)|hyperpage}{4} +\indexentry{sensor1 (source.EV3 attribute)|hyperpage}{4} +\indexentry{sensor2 (source.EV3 attribute)|hyperpage}{4} +\indexentry{sensor3 (source.EV3 attribute)|hyperpage}{4} +\indexentry{sensor4 (source.EV3 attribute)|hyperpage}{4} +\indexentry{debug (source.EV3 attribute)|hyperpage}{4} +\indexentry{batteryMode (source.EV3 attribute)|hyperpage}{4} +\indexentry{batteryValue (source.EV3 attribute)|hyperpage}{4} +\indexentry{isConnected (source.EV3 attribute)|hyperpage}{4} +\indexentry{beep() (source.EV3 method)|hyperpage}{4} +\indexentry{connect() (source.EV3 method)|hyperpage}{5} +\indexentry{disconnect() (source.EV3 method)|hyperpage}{5} +\indexentry{playTone() (source.EV3 method)|hyperpage}{5} +\indexentry{setProperties() (source.EV3 method)|hyperpage}{6} +\indexentry{stopAllMotors() (source.EV3 method)|hyperpage}{6} +\indexentry{stopTone() (source.EV3 method)|hyperpage}{6} +\indexentry{tonePlayed() (source.EV3 method)|hyperpage}{6} +\indexentry{source (module)|hyperpage}{6} +\indexentry{Motor (class in source)|hyperpage}{6} +\indexentry{power (source.Motor attribute)|hyperpage}{7} +\indexentry{speedRegulation (source.Motor attribute)|hyperpage}{7} +\indexentry{smoothStart (source.Motor attribute)|hyperpage}{7} +\indexentry{smoothStop (source.Motor attribute)|hyperpage}{7} +\indexentry{limitValue (source.Motor attribute)|hyperpage}{7} +\indexentry{limitMode (source.Motor attribute)|hyperpage}{7} +\indexentry{brakeMode (source.Motor attribute)|hyperpage}{7} +\indexentry{debug (source.Motor attribute)|hyperpage}{7} +\indexentry{isRunning (source.Motor attribute)|hyperpage}{7} +\indexentry{tachoCount (source.Motor attribute)|hyperpage}{7} +\indexentry{currentSpeed (source.Motor attribute)|hyperpage}{7} +\indexentry{type (source.Motor attribute)|hyperpage}{7} +\indexentry{internalReset() (source.Motor method)|hyperpage}{8} +\indexentry{resetTachoCount() (source.Motor method)|hyperpage}{8} +\indexentry{setBrake() (source.Motor method)|hyperpage}{8} +\indexentry{setProperties() (source.Motor method)|hyperpage}{8} +\indexentry{start() (source.Motor method)|hyperpage}{9} +\indexentry{stop() (source.Motor method)|hyperpage}{9} +\indexentry{syncedStart() (source.Motor method)|hyperpage}{9} +\indexentry{syncedStop() (source.Motor method)|hyperpage}{9} +\indexentry{waitFor() (source.Motor method)|hyperpage}{10} +\indexentry{source (module)|hyperpage}{10} +\indexentry{Sensor (class in source)|hyperpage}{10} +\indexentry{mode (source.Sensor attribute)|hyperpage}{10} +\indexentry{debug (source.Sensor attribute)|hyperpage}{12} +\indexentry{value (source.Sensor attribute)|hyperpage}{12} +\indexentry{type (source.Sensor attribute)|hyperpage}{12} +\indexentry{reset() (source.Sensor method)|hyperpage}{13} +\indexentry{setProperties() (source.Sensor method)|hyperpage}{13} +\indexentry{source (module)|hyperpage}{13} +\indexentry{source (module)|hyperpage}{13} diff --git a/docs/_build/latex/MindstormsEV3Toolbox.ilg b/docs/_build/latex/MindstormsEV3Toolbox.ilg new file mode 100644 index 0000000000000000000000000000000000000000..71dbe03a91a3d1ce8f630d9dd105aa283353952f --- /dev/null +++ b/docs/_build/latex/MindstormsEV3Toolbox.ilg @@ -0,0 +1,7 @@ +This is makeindex, version 2.15 [TeX Live 2013] (kpathsea + Thai support). +Scanning style file ./python.ist......done (6 attributes redefined, 0 ignored). +Scanning input file MindstormsEV3Toolbox.idx....done (55 entries accepted, 0 rejected). +Sorting entries....done (342 comparisons). +Generating output file MindstormsEV3Toolbox.ind....done (93 lines written, 0 warnings). +Output written in MindstormsEV3Toolbox.ind. +Transcript written in MindstormsEV3Toolbox.ilg. diff --git a/docs/_build/latex/MindstormsEV3Toolbox.ind b/docs/_build/latex/MindstormsEV3Toolbox.ind new file mode 100644 index 0000000000000000000000000000000000000000..e261917e2663ce88ac64af6d6488c42d689ddddd --- /dev/null +++ b/docs/_build/latex/MindstormsEV3Toolbox.ind @@ -0,0 +1,93 @@ +\begin{theindex} +\def\bigletter#1{{\Large\sffamily#1}\nopagebreak\vspace{1mm}} + + \bigletter B + \item batteryMode (source.EV3 attribute), \hyperpage{4} + \item batteryValue (source.EV3 attribute), \hyperpage{4} + \item beep() (source.EV3 method), \hyperpage{4} + \item brakeMode (source.Motor attribute), \hyperpage{7} + + \indexspace + \bigletter C + \item connect() (source.EV3 method), \hyperpage{5} + \item currentSpeed (source.Motor attribute), \hyperpage{7} + + \indexspace + \bigletter D + \item debug (source.EV3 attribute), \hyperpage{4} + \item debug (source.Motor attribute), \hyperpage{7} + \item debug (source.Sensor attribute), \hyperpage{12} + \item disconnect() (source.EV3 method), \hyperpage{5} + + \indexspace + \bigletter E + \item EV3 (class in source), \hyperpage{3} + + \indexspace + \bigletter I + \item internalReset() (source.Motor method), \hyperpage{8} + \item isConnected (source.EV3 attribute), \hyperpage{4} + \item isRunning (source.Motor attribute), \hyperpage{7} + + \indexspace + \bigletter L + \item limitMode (source.Motor attribute), \hyperpage{7} + \item limitValue (source.Motor attribute), \hyperpage{7} + + \indexspace + \bigletter M + \item mode (source.Sensor attribute), \hyperpage{10} + \item Motor (class in source), \hyperpage{6} + \item motorA (source.EV3 attribute), \hyperpage{4} + \item motorB (source.EV3 attribute), \hyperpage{4} + \item motorC (source.EV3 attribute), \hyperpage{4} + \item motorD (source.EV3 attribute), \hyperpage{4} + + \indexspace + \bigletter P + \item playTone() (source.EV3 method), \hyperpage{5} + \item power (source.Motor attribute), \hyperpage{7} + + \indexspace + \bigletter R + \item reset() (source.Sensor method), \hyperpage{13} + \item resetTachoCount() (source.Motor method), \hyperpage{8} + + \indexspace + \bigletter S + \item Sensor (class in source), \hyperpage{10} + \item sensor1 (source.EV3 attribute), \hyperpage{4} + \item sensor2 (source.EV3 attribute), \hyperpage{4} + \item sensor3 (source.EV3 attribute), \hyperpage{4} + \item sensor4 (source.EV3 attribute), \hyperpage{4} + \item setBrake() (source.Motor method), \hyperpage{8} + \item setProperties() (source.EV3 method), \hyperpage{6} + \item setProperties() (source.Motor method), \hyperpage{8} + \item setProperties() (source.Sensor method), \hyperpage{13} + \item smoothStart (source.Motor attribute), \hyperpage{7} + \item smoothStop (source.Motor attribute), \hyperpage{7} + \item source (module), \hyperpage{3}, \hyperpage{6}, \hyperpage{10}, \hyperpage{13} + \item speedRegulation (source.Motor attribute), \hyperpage{7} + \item start() (source.Motor method), \hyperpage{9} + \item stop() (source.Motor method), \hyperpage{9} + \item stopAllMotors() (source.EV3 method), \hyperpage{6} + \item stopTone() (source.EV3 method), \hyperpage{6} + \item syncedStart() (source.Motor method), \hyperpage{9} + \item syncedStop() (source.Motor method), \hyperpage{9} + + \indexspace + \bigletter T + \item tachoCount (source.Motor attribute), \hyperpage{7} + \item tonePlayed() (source.EV3 method), \hyperpage{6} + \item type (source.Motor attribute), \hyperpage{7} + \item type (source.Sensor attribute), \hyperpage{12} + + \indexspace + \bigletter V + \item value (source.Sensor attribute), \hyperpage{12} + + \indexspace + \bigletter W + \item waitFor() (source.Motor method), \hyperpage{10} + +\end{theindex} diff --git a/docs/_build/latex/MindstormsEV3Toolbox.log b/docs/_build/latex/MindstormsEV3Toolbox.log new file mode 100644 index 0000000000000000000000000000000000000000..7d7ef6fe2c5680ef92f08ee695fdd76d70a4639b --- /dev/null +++ b/docs/_build/latex/MindstormsEV3Toolbox.log @@ -0,0 +1,1081 @@ +This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian) (format=pdflatex 2016.11.23) 23 FEB 2017 15:01 +entering extended mode + restricted \write18 enabled. + %&-line parsing enabled. +**MindstormsEV3Toolbox.tex +(./MindstormsEV3Toolbox.tex +LaTeX2e <2011/06/27> +Babel <3.9h> and hyphenation patterns for 78 languages loaded. +(./sphinxmanual.cls +Document Class: sphinxmanual 2009/06/02 Document class (Sphinx manual) +(/usr/share/texlive/texmf-dist/tex/latex/base/report.cls +Document Class: report 2007/10/19 v1.4h Standard LaTeX document class +(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo +File: size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option) +) +\c@part=\count79 +\c@chapter=\count80 +\c@section=\count81 +\c@subsection=\count82 +\c@subsubsection=\count83 +\c@paragraph=\count84 +\c@subparagraph=\count85 +\c@figure=\count86 +\c@table=\count87 +\abovecaptionskip=\skip41 +\belowcaptionskip=\skip42 +\bibindent=\dimen102 +)) (./iftex.sty +Package: iftex 2013/04/04 v0.2 Provides if(tex) conditional for PDFTeX, XeTeX, +and LuaTeX +) +(/usr/share/texlive/texmf-dist/tex/latex/base/inputenc.sty +Package: inputenc 2008/03/30 v1.1d Input encoding file +\inpenc@prehook=\toks14 +\inpenc@posthook=\toks15 + +(/usr/share/texlive/texmf-dist/tex/latex/base/utf8.def +File: utf8.def 2008/04/05 v1.1m UTF-8 support for inputenc +Now handling font encoding OML ... +... no UTF-8 mapping file for font encoding OML +Now handling font encoding T1 ... +... processing UTF-8 mapping file for font encoding T1 + +(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.dfu +File: t1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc + defining Unicode char U+00A1 (decimal 161) + defining Unicode char U+00A3 (decimal 163) + defining Unicode char U+00AB (decimal 171) + defining Unicode char U+00BB (decimal 187) + defining Unicode char U+00BF (decimal 191) + defining Unicode char U+00C0 (decimal 192) + defining Unicode char U+00C1 (decimal 193) + defining Unicode char U+00C2 (decimal 194) + defining Unicode char U+00C3 (decimal 195) + defining Unicode char U+00C4 (decimal 196) + defining Unicode char U+00C5 (decimal 197) + defining Unicode char U+00C6 (decimal 198) + defining Unicode char U+00C7 (decimal 199) + defining Unicode char U+00C8 (decimal 200) + defining Unicode char U+00C9 (decimal 201) + defining Unicode char U+00CA (decimal 202) + defining Unicode char U+00CB (decimal 203) + defining Unicode char U+00CC (decimal 204) + defining Unicode char U+00CD (decimal 205) + defining Unicode char U+00CE (decimal 206) + defining Unicode char U+00CF (decimal 207) + defining Unicode char U+00D0 (decimal 208) + defining Unicode char U+00D1 (decimal 209) + defining Unicode char U+00D2 (decimal 210) + defining Unicode char U+00D3 (decimal 211) + defining Unicode char U+00D4 (decimal 212) + defining Unicode char U+00D5 (decimal 213) + defining Unicode char U+00D6 (decimal 214) + defining Unicode char U+00D8 (decimal 216) + defining Unicode char U+00D9 (decimal 217) + defining Unicode char U+00DA (decimal 218) + defining Unicode char U+00DB (decimal 219) + defining Unicode char U+00DC (decimal 220) + defining Unicode char U+00DD (decimal 221) + defining Unicode char U+00DE (decimal 222) + defining Unicode char U+00DF (decimal 223) + defining Unicode char U+00E0 (decimal 224) + defining Unicode char U+00E1 (decimal 225) + defining Unicode char U+00E2 (decimal 226) + defining Unicode char U+00E3 (decimal 227) + defining Unicode char U+00E4 (decimal 228) + defining Unicode char U+00E5 (decimal 229) + defining Unicode char U+00E6 (decimal 230) + defining Unicode char U+00E7 (decimal 231) + defining Unicode char U+00E8 (decimal 232) + defining Unicode char U+00E9 (decimal 233) + defining Unicode char U+00EA (decimal 234) + defining Unicode char U+00EB (decimal 235) + defining Unicode char U+00EC (decimal 236) + defining Unicode char U+00ED (decimal 237) + defining Unicode char U+00EE (decimal 238) + defining Unicode char U+00EF (decimal 239) + defining Unicode char U+00F0 (decimal 240) + defining Unicode char U+00F1 (decimal 241) + defining Unicode char U+00F2 (decimal 242) + defining Unicode char U+00F3 (decimal 243) + defining Unicode char U+00F4 (decimal 244) + defining Unicode char U+00F5 (decimal 245) + defining Unicode char U+00F6 (decimal 246) + defining Unicode char U+00F8 (decimal 248) + defining Unicode char U+00F9 (decimal 249) + defining Unicode char U+00FA (decimal 250) + defining Unicode char U+00FB (decimal 251) + defining Unicode char U+00FC (decimal 252) + defining Unicode char U+00FD (decimal 253) + defining Unicode char U+00FE (decimal 254) + defining Unicode char U+00FF (decimal 255) + defining Unicode char U+0102 (decimal 258) + defining Unicode char U+0103 (decimal 259) + defining Unicode char U+0104 (decimal 260) + defining Unicode char U+0105 (decimal 261) + defining Unicode char U+0106 (decimal 262) + defining Unicode char U+0107 (decimal 263) + defining Unicode char U+010C (decimal 268) + defining Unicode char U+010D (decimal 269) + defining Unicode char U+010E (decimal 270) + defining Unicode char U+010F (decimal 271) + defining Unicode char U+0110 (decimal 272) + defining Unicode char U+0111 (decimal 273) + defining Unicode char U+0118 (decimal 280) + defining Unicode char U+0119 (decimal 281) + defining Unicode char U+011A (decimal 282) + defining Unicode char U+011B (decimal 283) + defining Unicode char U+011E (decimal 286) + defining Unicode char U+011F (decimal 287) + defining Unicode char U+0130 (decimal 304) + defining Unicode char U+0131 (decimal 305) + defining Unicode char U+0132 (decimal 306) + defining Unicode char U+0133 (decimal 307) + defining Unicode char U+0139 (decimal 313) + defining Unicode char U+013A (decimal 314) + defining Unicode char U+013D (decimal 317) + defining Unicode char U+013E (decimal 318) + defining Unicode char U+0141 (decimal 321) + defining Unicode char U+0142 (decimal 322) + defining Unicode char U+0143 (decimal 323) + defining Unicode char U+0144 (decimal 324) + defining Unicode char U+0147 (decimal 327) + defining Unicode char U+0148 (decimal 328) + defining Unicode char U+014A (decimal 330) + defining Unicode char U+014B (decimal 331) + defining Unicode char U+0150 (decimal 336) + defining Unicode char U+0151 (decimal 337) + defining Unicode char U+0152 (decimal 338) + defining Unicode char U+0153 (decimal 339) + defining Unicode char U+0154 (decimal 340) + defining Unicode char U+0155 (decimal 341) + defining Unicode char U+0158 (decimal 344) + defining Unicode char U+0159 (decimal 345) + defining Unicode char U+015A (decimal 346) + defining Unicode char U+015B (decimal 347) + defining Unicode char U+015E (decimal 350) + defining Unicode char U+015F (decimal 351) + defining Unicode char U+0160 (decimal 352) + defining Unicode char U+0161 (decimal 353) + defining Unicode char U+0162 (decimal 354) + defining Unicode char U+0163 (decimal 355) + defining Unicode char U+0164 (decimal 356) + defining Unicode char U+0165 (decimal 357) + defining Unicode char U+016E (decimal 366) + defining Unicode char U+016F (decimal 367) + defining Unicode char U+0170 (decimal 368) + defining Unicode char U+0171 (decimal 369) + defining Unicode char U+0178 (decimal 376) + defining Unicode char U+0179 (decimal 377) + defining Unicode char U+017A (decimal 378) + defining Unicode char U+017B (decimal 379) + defining Unicode char U+017C (decimal 380) + defining Unicode char U+017D (decimal 381) + defining Unicode char U+017E (decimal 382) + defining Unicode char U+200C (decimal 8204) + defining Unicode char U+2013 (decimal 8211) + defining Unicode char U+2014 (decimal 8212) + defining Unicode char U+2018 (decimal 8216) + defining Unicode char U+2019 (decimal 8217) + defining Unicode char U+201A (decimal 8218) + defining Unicode char U+201C (decimal 8220) + defining Unicode char U+201D (decimal 8221) + defining Unicode char U+201E (decimal 8222) + defining Unicode char U+2030 (decimal 8240) + defining Unicode char U+2031 (decimal 8241) + defining Unicode char U+2039 (decimal 8249) + defining Unicode char U+203A (decimal 8250) + defining Unicode char U+2423 (decimal 9251) +) +Now handling font encoding OT1 ... +... processing UTF-8 mapping file for font encoding OT1 + +(/usr/share/texlive/texmf-dist/tex/latex/base/ot1enc.dfu +File: ot1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc + defining Unicode char U+00A1 (decimal 161) + defining Unicode char U+00A3 (decimal 163) + defining Unicode char U+00B8 (decimal 184) + defining Unicode char U+00BF (decimal 191) + defining Unicode char U+00C5 (decimal 197) + defining Unicode char U+00C6 (decimal 198) + defining Unicode char U+00D8 (decimal 216) + defining Unicode char U+00DF (decimal 223) + defining Unicode char U+00E6 (decimal 230) + defining Unicode char U+00EC (decimal 236) + defining Unicode char U+00ED (decimal 237) + defining Unicode char U+00EE (decimal 238) + defining Unicode char U+00EF (decimal 239) + defining Unicode char U+00F8 (decimal 248) + defining Unicode char U+0131 (decimal 305) + defining Unicode char U+0141 (decimal 321) + defining Unicode char U+0142 (decimal 322) + defining Unicode char U+0152 (decimal 338) + defining Unicode char U+0153 (decimal 339) + defining Unicode char U+2013 (decimal 8211) + defining Unicode char U+2014 (decimal 8212) + defining Unicode char U+2018 (decimal 8216) + defining Unicode char U+2019 (decimal 8217) + defining Unicode char U+201C (decimal 8220) + defining Unicode char U+201D (decimal 8221) +) +Now handling font encoding OMS ... +... processing UTF-8 mapping file for font encoding OMS + +(/usr/share/texlive/texmf-dist/tex/latex/base/omsenc.dfu +File: omsenc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc + defining Unicode char U+00A7 (decimal 167) + defining Unicode char U+00B6 (decimal 182) + defining Unicode char U+00B7 (decimal 183) + defining Unicode char U+2020 (decimal 8224) + defining Unicode char U+2021 (decimal 8225) + defining Unicode char U+2022 (decimal 8226) +) +Now handling font encoding OMX ... +... no UTF-8 mapping file for font encoding OMX +Now handling font encoding U ... +... no UTF-8 mapping file for font encoding U + defining Unicode char U+00A9 (decimal 169) + defining Unicode char U+00AA (decimal 170) + defining Unicode char U+00AE (decimal 174) + defining Unicode char U+00BA (decimal 186) + defining Unicode char U+02C6 (decimal 710) + defining Unicode char U+02DC (decimal 732) + defining Unicode char U+200C (decimal 8204) + defining Unicode char U+2026 (decimal 8230) + defining Unicode char U+2122 (decimal 8482) + defining Unicode char U+2423 (decimal 9251) +)) + defining Unicode char U+00A0 (decimal 160) + +(/usr/share/texlive/texmf-dist/tex/latex/cmap/cmap.sty +Package: cmap 2008/03/06 v1.0h CMap support: searchable PDF +) +(/usr/share/texlive/texmf-dist/tex/latex/base/fontenc.sty +Package: fontenc 2005/09/27 v1.99g Standard LaTeX package + +(/usr/share/texlive/texmf-dist/tex/latex/base/t1enc.def +File: t1enc.def 2005/09/27 v1.99g Standard LaTeX file +LaTeX Font Info: Redeclaring font encoding T1 on input line 43. +)<<t1.cmap>>) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsmath.sty +Package: amsmath 2013/01/14 v2.14 AMS math features +\@mathmargin=\skip43 + +For additional information on amsmath, use the `?' option. +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amstext.sty +Package: amstext 2000/06/29 v2.01 + +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsgen.sty +File: amsgen.sty 1999/11/30 v2.0 +\@emptytoks=\toks16 +\ex@=\dimen103 +)) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsbsy.sty +Package: amsbsy 1999/11/29 v1.2d +\pmbraise@=\dimen104 +) +(/usr/share/texlive/texmf-dist/tex/latex/amsmath/amsopn.sty +Package: amsopn 1999/12/14 v2.01 operator names +) +\inf@bad=\count88 +LaTeX Info: Redefining \frac on input line 210. +\uproot@=\count89 +\leftroot@=\count90 +LaTeX Info: Redefining \overline on input line 306. +\classnum@=\count91 +\DOTSCASE@=\count92 +LaTeX Info: Redefining \ldots on input line 378. +LaTeX Info: Redefining \dots on input line 381. +LaTeX Info: Redefining \cdots on input line 466. +\Mathstrutbox@=\box26 +\strutbox@=\box27 +\big@size=\dimen105 +LaTeX Font Info: Redeclaring font encoding OML on input line 566. +LaTeX Font Info: Redeclaring font encoding OMS on input line 567. +\macc@depth=\count93 +\c@MaxMatrixCols=\count94 +\dotsspace@=\muskip10 +\c@parentequation=\count95 +\dspbrk@lvl=\count96 +\tag@help=\toks17 +\row@=\count97 +\column@=\count98 +\maxfields@=\count99 +\andhelp@=\toks18 +\eqnshift@=\dimen106 +\alignsep@=\dimen107 +\tagshift@=\dimen108 +\tagwidth@=\dimen109 +\totwidth@=\dimen110 +\lineht@=\dimen111 +\@envbody=\toks19 +\multlinegap=\skip44 +\multlinetaggap=\skip45 +\mathdisplay@stack=\toks20 +LaTeX Info: Redefining \[ on input line 2665. +LaTeX Info: Redefining \] on input line 2666. +) +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amssymb.sty +Package: amssymb 2013/01/14 v3.01 AMS font symbols + +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/amsfonts.sty +Package: amsfonts 2013/01/14 v3.01 Basic AMSFonts support +\symAMSa=\mathgroup4 +\symAMSb=\mathgroup5 +LaTeX Font Info: Overwriting math alphabet `\mathfrak' in version `bold' +(Font) U/euf/m/n --> U/euf/b/n on input line 106. +)) +(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.sty +Package: babel 2013/12/03 3.9h The Babel package + +(/usr/share/texlive/texmf-dist/tex/generic/babel-english/english.ldf +Language: english 2012/08/20 v3.3p English support from the babel system + +(/usr/share/texlive/texmf-dist/tex/generic/babel/babel.def +File: babel.def 2013/12/03 3.9h Babel common definitions +\babel@savecnt=\count100 +\U@D=\dimen112 +) +\l@canadian = a dialect from \language\l@american +\l@australian = a dialect from \language\l@british +\l@newzealand = a dialect from \language\l@british +)) +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/times.sty +Package: times 2005/04/12 PSNFSS-v9.2a (SPQR) +) (./fncychap.sty +Package: fncychap 2007/07/30 v1.34 LaTeX package (Revised chapters) +\RW=\skip46 +\mylen=\skip47 +\myhi=\skip48 +\px=\skip49 +\py=\skip50 +\pyy=\skip51 +\pxx=\skip52 +\c@AlphaCnt=\count101 +\c@AlphaDecCnt=\count102 +) +(/usr/share/texlive/texmf-dist/tex/latex/tools/longtable.sty +Package: longtable 2004/02/01 v4.11 Multi-page Table package (DPC) +\LTleft=\skip53 +\LTright=\skip54 +\LTpre=\skip55 +\LTpost=\skip56 +\LTchunksize=\count103 +\LTcapwidth=\dimen113 +\LT@head=\box28 +\LT@firsthead=\box29 +\LT@foot=\box30 +\LT@lastfoot=\box31 +\LT@cols=\count104 +\LT@rows=\count105 +\c@LT@tables=\count106 +\c@LT@chunks=\count107 +\LT@p@ftn=\toks21 +) (./sphinx.sty +Package: sphinx 2010/01/15 LaTeX package (Sphinx markup) + +(/usr/share/texlive/texmf-dist/tex/latex/fancyhdr/fancyhdr.sty +\fancy@headwidth=\skip57 +\f@ncyO@elh=\skip58 +\f@ncyO@erh=\skip59 +\f@ncyO@olh=\skip60 +\f@ncyO@orh=\skip61 +\f@ncyO@elf=\skip62 +\f@ncyO@erf=\skip63 +\f@ncyO@olf=\skip64 +\f@ncyO@orf=\skip65 +) +(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty +Package: textcomp 2005/09/27 v1.99g Standard LaTeX package +Package textcomp Info: Sub-encoding information: +(textcomp) 5 = only ISO-Adobe without \textcurrency +(textcomp) 4 = 5 + \texteuro +(textcomp) 3 = 4 + \textohm +(textcomp) 2 = 3 + \textestimated + \textcurrency +(textcomp) 1 = TS1 - \textcircled - \t +(textcomp) 0 = TS1 (full) +(textcomp) Font families with sub-encoding setting implement +(textcomp) only a restricted character set as indicated. +(textcomp) Family '?' is the default used for unknown fonts. +(textcomp) See the documentation for details. +Package textcomp Info: Setting ? sub-encoding to TS1/1 on input line 71. + +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def +File: ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file +Now handling font encoding TS1 ... +... processing UTF-8 mapping file for font encoding TS1 + +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.dfu +File: ts1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc + defining Unicode char U+00A2 (decimal 162) + defining Unicode char U+00A3 (decimal 163) + defining Unicode char U+00A4 (decimal 164) + defining Unicode char U+00A5 (decimal 165) + defining Unicode char U+00A6 (decimal 166) + defining Unicode char U+00A7 (decimal 167) + defining Unicode char U+00A8 (decimal 168) + defining Unicode char U+00A9 (decimal 169) + defining Unicode char U+00AA (decimal 170) + defining Unicode char U+00AC (decimal 172) + defining Unicode char U+00AE (decimal 174) + defining Unicode char U+00AF (decimal 175) + defining Unicode char U+00B0 (decimal 176) + defining Unicode char U+00B1 (decimal 177) + defining Unicode char U+00B2 (decimal 178) + defining Unicode char U+00B3 (decimal 179) + defining Unicode char U+00B4 (decimal 180) + defining Unicode char U+00B5 (decimal 181) + defining Unicode char U+00B6 (decimal 182) + defining Unicode char U+00B7 (decimal 183) + defining Unicode char U+00B9 (decimal 185) + defining Unicode char U+00BA (decimal 186) + defining Unicode char U+00BC (decimal 188) + defining Unicode char U+00BD (decimal 189) + defining Unicode char U+00BE (decimal 190) + defining Unicode char U+00D7 (decimal 215) + defining Unicode char U+00F7 (decimal 247) + defining Unicode char U+0192 (decimal 402) + defining Unicode char U+02C7 (decimal 711) + defining Unicode char U+02D8 (decimal 728) + defining Unicode char U+02DD (decimal 733) + defining Unicode char U+0E3F (decimal 3647) + defining Unicode char U+2016 (decimal 8214) + defining Unicode char U+2020 (decimal 8224) + defining Unicode char U+2021 (decimal 8225) + defining Unicode char U+2022 (decimal 8226) + defining Unicode char U+2030 (decimal 8240) + defining Unicode char U+2031 (decimal 8241) + defining Unicode char U+203B (decimal 8251) + defining Unicode char U+203D (decimal 8253) + defining Unicode char U+2044 (decimal 8260) + defining Unicode char U+204E (decimal 8270) + defining Unicode char U+2052 (decimal 8274) + defining Unicode char U+20A1 (decimal 8353) + defining Unicode char U+20A4 (decimal 8356) + defining Unicode char U+20A6 (decimal 8358) + defining Unicode char U+20A9 (decimal 8361) + defining Unicode char U+20AB (decimal 8363) + defining Unicode char U+20AC (decimal 8364) + defining Unicode char U+20B1 (decimal 8369) + defining Unicode char U+2103 (decimal 8451) + defining Unicode char U+2116 (decimal 8470) + defining Unicode char U+2117 (decimal 8471) + defining Unicode char U+211E (decimal 8478) + defining Unicode char U+2120 (decimal 8480) + defining Unicode char U+2122 (decimal 8482) + defining Unicode char U+2126 (decimal 8486) + defining Unicode char U+2127 (decimal 8487) + defining Unicode char U+212E (decimal 8494) + defining Unicode char U+2190 (decimal 8592) + defining Unicode char U+2191 (decimal 8593) + defining Unicode char U+2192 (decimal 8594) + defining Unicode char U+2193 (decimal 8595) + defining Unicode char U+2329 (decimal 9001) + defining Unicode char U+232A (decimal 9002) + defining Unicode char U+2422 (decimal 9250) + defining Unicode char U+25E6 (decimal 9702) + defining Unicode char U+25EF (decimal 9711) + defining Unicode char U+266A (decimal 9834) +)) +LaTeX Info: Redefining \oldstylenums on input line 266. +Package textcomp Info: Setting cmr sub-encoding to TS1/0 on input line 281. +Package textcomp Info: Setting cmss sub-encoding to TS1/0 on input line 282. +Package textcomp Info: Setting cmtt sub-encoding to TS1/0 on input line 283. +Package textcomp Info: Setting cmvtt sub-encoding to TS1/0 on input line 284. +Package textcomp Info: Setting cmbr sub-encoding to TS1/0 on input line 285. +Package textcomp Info: Setting cmtl sub-encoding to TS1/0 on input line 286. +Package textcomp Info: Setting ccr sub-encoding to TS1/0 on input line 287. +Package textcomp Info: Setting ptm sub-encoding to TS1/4 on input line 288. +Package textcomp Info: Setting pcr sub-encoding to TS1/4 on input line 289. +Package textcomp Info: Setting phv sub-encoding to TS1/4 on input line 290. +Package textcomp Info: Setting ppl sub-encoding to TS1/3 on input line 291. +Package textcomp Info: Setting pag sub-encoding to TS1/4 on input line 292. +Package textcomp Info: Setting pbk sub-encoding to TS1/4 on input line 293. +Package textcomp Info: Setting pnc sub-encoding to TS1/4 on input line 294. +Package textcomp Info: Setting pzc sub-encoding to TS1/4 on input line 295. +Package textcomp Info: Setting bch sub-encoding to TS1/4 on input line 296. +Package textcomp Info: Setting put sub-encoding to TS1/5 on input line 297. +Package textcomp Info: Setting uag sub-encoding to TS1/5 on input line 298. +Package textcomp Info: Setting ugq sub-encoding to TS1/5 on input line 299. +Package textcomp Info: Setting ul8 sub-encoding to TS1/4 on input line 300. +Package textcomp Info: Setting ul9 sub-encoding to TS1/4 on input line 301. +Package textcomp Info: Setting augie sub-encoding to TS1/5 on input line 302. +Package textcomp Info: Setting dayrom sub-encoding to TS1/3 on input line 303. +Package textcomp Info: Setting dayroms sub-encoding to TS1/3 on input line 304. + +Package textcomp Info: Setting pxr sub-encoding to TS1/0 on input line 305. +Package textcomp Info: Setting pxss sub-encoding to TS1/0 on input line 306. +Package textcomp Info: Setting pxtt sub-encoding to TS1/0 on input line 307. +Package textcomp Info: Setting txr sub-encoding to TS1/0 on input line 308. +Package textcomp Info: Setting txss sub-encoding to TS1/0 on input line 309. +Package textcomp Info: Setting txtt sub-encoding to TS1/0 on input line 310. +Package textcomp Info: Setting lmr sub-encoding to TS1/0 on input line 311. +Package textcomp Info: Setting lmdh sub-encoding to TS1/0 on input line 312. +Package textcomp Info: Setting lmss sub-encoding to TS1/0 on input line 313. +Package textcomp Info: Setting lmssq sub-encoding to TS1/0 on input line 314. +Package textcomp Info: Setting lmvtt sub-encoding to TS1/0 on input line 315. +Package textcomp Info: Setting qhv sub-encoding to TS1/0 on input line 316. +Package textcomp Info: Setting qag sub-encoding to TS1/0 on input line 317. +Package textcomp Info: Setting qbk sub-encoding to TS1/0 on input line 318. +Package textcomp Info: Setting qcr sub-encoding to TS1/0 on input line 319. +Package textcomp Info: Setting qcs sub-encoding to TS1/0 on input line 320. +Package textcomp Info: Setting qpl sub-encoding to TS1/0 on input line 321. +Package textcomp Info: Setting qtm sub-encoding to TS1/0 on input line 322. +Package textcomp Info: Setting qzc sub-encoding to TS1/0 on input line 323. +Package textcomp Info: Setting qhvc sub-encoding to TS1/0 on input line 324. +Package textcomp Info: Setting futs sub-encoding to TS1/4 on input line 325. +Package textcomp Info: Setting futx sub-encoding to TS1/4 on input line 326. +Package textcomp Info: Setting futj sub-encoding to TS1/4 on input line 327. +Package textcomp Info: Setting hlh sub-encoding to TS1/3 on input line 328. +Package textcomp Info: Setting hls sub-encoding to TS1/3 on input line 329. +Package textcomp Info: Setting hlst sub-encoding to TS1/3 on input line 330. +Package textcomp Info: Setting hlct sub-encoding to TS1/5 on input line 331. +Package textcomp Info: Setting hlx sub-encoding to TS1/5 on input line 332. +Package textcomp Info: Setting hlce sub-encoding to TS1/5 on input line 333. +Package textcomp Info: Setting hlcn sub-encoding to TS1/5 on input line 334. +Package textcomp Info: Setting hlcw sub-encoding to TS1/5 on input line 335. +Package textcomp Info: Setting hlcf sub-encoding to TS1/5 on input line 336. +Package textcomp Info: Setting pplx sub-encoding to TS1/3 on input line 337. +Package textcomp Info: Setting pplj sub-encoding to TS1/3 on input line 338. +Package textcomp Info: Setting ptmx sub-encoding to TS1/4 on input line 339. +Package textcomp Info: Setting ptmj sub-encoding to TS1/4 on input line 340. +) +(/usr/share/texlive/texmf-dist/tex/latex/fancybox/fancybox.sty +Package: fancybox 2010/05/15 1.4 + +Style option: `fancybox' v1.4 <2010/05/15> (tvz) +\@fancybox=\box32 +\shadowsize=\dimen114 +\@Sbox=\box33 +\do@VerbBox=\toks22 +\the@fancyput=\toks23 +\this@fancyput=\toks24 +\EndVerbatimTokens=\toks25 +\Verbatim@Outfile=\write3 +\Verbatim@Infile=\read1 +) (/usr/share/texlive/texmf-dist/tex/latex/titlesec/titlesec.sty +Package: titlesec 2011/12/15 v2.10.0 Sectioning titles +\ttl@box=\box34 +\beforetitleunit=\skip66 +\aftertitleunit=\skip67 +\ttl@plus=\dimen115 +\ttl@minus=\dimen116 +\ttl@toksa=\toks26 +\titlewidth=\dimen117 +\titlewidthlast=\dimen118 +\titlewidthfirst=\dimen119 +) +(./tabulary.sty +Package: tabulary 2008/12/01 v0.9 tabulary package (DPC) + (/usr/share/texlive/texmf-dist/tex/latex/tools/array.sty +Package: array 2008/09/09 v2.4c Tabular extension package (FMi) +\col@sep=\dimen120 +\extrarowheight=\dimen121 +\NC@list=\toks27 +\extratabsurround=\skip68 +\backup@length=\skip69 +) +\TY@count=\count108 +\TY@linewidth=\dimen122 +\tymin=\dimen123 +\tymax=\dimen124 +\TY@tablewidth=\dimen125 +) +(/usr/share/texlive/texmf-dist/tex/latex/base/makeidx.sty +Package: makeidx 2000/03/29 v1.0m Standard LaTeX package +) +(/usr/share/texlive/texmf-dist/tex/latex/framed/framed.sty +Package: framed 2011/10/22 v 0.96: framed or shaded text with page breaks +\OuterFrameSep=\skip70 +\fb@frw=\dimen126 +\fb@frh=\dimen127 +\FrameRule=\dimen128 +\FrameSep=\dimen129 +) +(/usr/share/texlive/texmf-dist/tex/latex/base/ifthen.sty +Package: ifthen 2001/05/26 v1.1c Standard LaTeX ifthen package (DPC) +) +(/usr/share/texmf/tex/latex/xcolor/xcolor.sty +Package: xcolor 2007/01/21 v2.11 LaTeX color extensions (UK) + +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/color.cfg +File: color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive +) +Package xcolor Info: Driver file: pdftex.def on input line 225. + +(/usr/share/texlive/texmf-dist/tex/latex/pdftex-def/pdftex.def +File: pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/infwarerr.sty +Package: infwarerr 2010/04/08 v1.3 Providing info/warning/error messages (HO) +) +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty +Package: ltxcmds 2011/11/09 v1.22 LaTeX kernel commands for general use (HO) +) +\Gread@gobject=\count109 +) +Package xcolor Info: Model `cmy' substituted by `cmy0' on input line 1337. +Package xcolor Info: Model `hsb' substituted by `rgb' on input line 1341. +Package xcolor Info: Model `RGB' extended on input line 1353. +Package xcolor Info: Model `HTML' substituted by `rgb' on input line 1355. +Package xcolor Info: Model `Hsb' substituted by `hsb' on input line 1356. +Package xcolor Info: Model `tHsb' substituted by `hsb' on input line 1357. +Package xcolor Info: Model `HSB' substituted by `hsb' on input line 1358. +Package xcolor Info: Model `Gray' substituted by `gray' on input line 1359. +Package xcolor Info: Model `wave' substituted by `hsb' on input line 1360. +) +(/usr/share/texlive/texmf-dist/tex/latex/fancyvrb/fancyvrb.sty +Package: fancyvrb 2008/02/07 + +Style option: `fancyvrb' v2.7a, with DG/SPQR fixes, and firstline=lastline fix +<2008/02/07> (tvz) (/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty +Package: keyval 1999/03/16 v1.13 key=value parser (DPC) +\KV@toks@=\toks28 +) +\FV@CodeLineNo=\count110 +\FV@InFile=\read2 +\FV@TabBox=\box35 +\c@FancyVerbLine=\count111 +\FV@StepNumber=\count112 +\FV@OutFile=\write4 +) (/usr/share/texlive/texmf-dist/tex/latex/threeparttable/threeparttable.sty +Package: threeparttable 2003/06/13 v 3.0 +\@tempboxb=\box36 +) +(/usr/share/texlive/texmf-dist/tex/latex/mdwtools/footnote.sty +Package: footnote 1997/01/28 1.13 Save footnotes around boxes +\fn@notes=\box37 +\fn@width=\dimen130 +) +(/usr/share/texlive/texmf-dist/tex/latex/wrapfig/wrapfig.sty +\wrapoverhang=\dimen131 +\WF@size=\dimen132 +\c@WF@wrappedlines=\count113 +\WF@box=\box38 +\WF@everypar=\toks29 +Package: wrapfig 2003/01/31 v 3.6 +) +(/usr/share/texlive/texmf-dist/tex/latex/parskip/parskip.sty +Package: parskip 2001/04/09 non-zero parskip adjustments +) +(/usr/share/texlive/texmf-dist/tex/latex/base/alltt.sty +Package: alltt 1997/06/16 v2.0g defines alltt environment +) +(/usr/share/texlive/texmf-dist/tex/latex/upquote/upquote.sty +Package: upquote 2012/04/19 v1.3 upright-quote and grave-accent glyphs in verba +tim +) +(/usr/share/texlive/texmf-dist/tex/latex/float/float.sty +Package: float 2001/11/08 v1.3d Float enhancements (AL) +\c@float@type=\count114 +\float@exts=\toks30 +\float@box=\box39 +\@float@everytoks=\toks31 +\@floatcapt=\box40 +) +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphicx.sty +Package: graphicx 1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/graphics.sty +Package: graphics 2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR) + +(/usr/share/texlive/texmf-dist/tex/latex/graphics/trig.sty +Package: trig 1999/03/16 v1.09 sin cos tan (DPC) +) +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/graphics.cfg +File: graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live +) +Package graphics Info: Driver file: pdftex.def on input line 91. +) +\Gin@req@height=\dimen133 +\Gin@req@width=\dimen134 +) +(/usr/share/texlive/texmf-dist/tex/plain/misc/pdfcolor.tex) +\sphinxcontinuationbox=\box41 +\sphinxvisiblespacebox=\box42 +\sphinxshadowsep=\skip71 +\sphinxshadowsize=\skip72 +\sphinxshadowrule=\skip73 +\py@argswidth=\skip74 +\lineblockindentation=\skip75 +\spx@image@box=\box43 + +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hyperref.sty +Package: hyperref 2012/11/06 v6.83m Hypertext links for LaTeX + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-hyperref.sty +Package: hobsub-hyperref 2012/05/28 v1.13 Bundle oberdiek, subset hyperref (HO) + + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/hobsub-generic.sty +Package: hobsub-generic 2012/05/28 v1.13 Bundle oberdiek, subset generic (HO) +Package: hobsub 2012/05/28 v1.13 Construct package bundles (HO) +Package hobsub Info: Skipping package `infwarerr' (already loaded). +Package hobsub Info: Skipping package `ltxcmds' (already loaded). +Package: ifluatex 2010/03/01 v1.3 Provides the ifluatex switch (HO) +Package ifluatex Info: LuaTeX not detected. +Package: ifvtex 2010/03/01 v1.5 Detect VTeX and its facilities (HO) +Package ifvtex Info: VTeX not detected. +Package: intcalc 2007/09/27 v1.1 Expandable calculations with integers (HO) +Package: ifpdf 2011/01/30 v2.3 Provides the ifpdf switch (HO) +Package ifpdf Info: pdfTeX in PDF mode is detected. +Package: etexcmds 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO) +Package etexcmds Info: Could not find \expanded. +(etexcmds) That can mean that you are not using pdfTeX 1.50 or +(etexcmds) that some package has redefined \expanded. +(etexcmds) In the latter case, load this package earlier. +Package: kvsetkeys 2012/04/25 v1.16 Key value parser (HO) +Package: kvdefinekeys 2011/04/07 v1.3 Define keys (HO) +Package: pdftexcmds 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO +) +Package pdftexcmds Info: LuaTeX not detected. +Package pdftexcmds Info: \pdf@primitive is available. +Package pdftexcmds Info: \pdf@ifprimitive is available. +Package pdftexcmds Info: \pdfdraftmode found. +Package: pdfescape 2011/11/25 v1.13 Implements pdfTeX's escape features (HO) +Package: bigintcalc 2012/04/08 v1.3 Expandable calculations on big integers (HO +) +Package: bitset 2011/01/30 v1.1 Handle bit-vector datatype (HO) +Package: uniquecounter 2011/01/30 v1.2 Provide unlimited unique counter (HO) +) +Package hobsub Info: Skipping package `hobsub' (already loaded). +Package: letltxmacro 2010/09/02 v1.4 Let assignment for LaTeX macros (HO) +Package: hopatch 2012/05/28 v1.2 Wrapper for package hooks (HO) +Package: xcolor-patch 2011/01/30 xcolor patch +Package: atveryend 2011/06/30 v1.8 Hooks at the very end of document (HO) +Package atveryend Info: \enddocument detected (standard20110627). +Package: atbegshi 2011/10/05 v1.16 At begin shipout hook (HO) +Package: refcount 2011/10/16 v3.4 Data extraction from label references (HO) +Package: hycolor 2011/01/30 v1.7 Color options for hyperref/bookmark (HO) +) +(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty +Package: ifxetex 2010/09/12 v0.6 Provides ifxetex conditional +) +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/auxhook.sty +Package: auxhook 2011/03/04 v1.3 Hooks for auxiliary files (HO) +) +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/kvoptions.sty +Package: kvoptions 2011/06/30 v3.11 Key value format for package options (HO) +) +\@linkdim=\dimen135 +\Hy@linkcounter=\count115 +\Hy@pagecounter=\count116 + +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/pd1enc.def +File: pd1enc.def 2012/11/06 v6.83m Hyperref: PDFDocEncoding definition (HO) +Now handling font encoding PD1 ... +... no UTF-8 mapping file for font encoding PD1 +) +\Hy@SavedSpaceFactor=\count117 + +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/hyperref.cfg +File: hyperref.cfg 2002/06/06 v1.2 hyperref configuration of TeXLive +) +Package hyperref Info: Option `unicode' set `true' on input line 4319. + +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/puenc.def +File: puenc.def 2012/11/06 v6.83m Hyperref: PDF Unicode definition (HO) +Now handling font encoding PU ... +... no UTF-8 mapping file for font encoding PU +) +Package hyperref Info: Option `colorlinks' set `true' on input line 4319. +Package hyperref Info: Option `breaklinks' set `true' on input line 4319. +Package hyperref Info: Hyper figures OFF on input line 4443. +Package hyperref Info: Link nesting OFF on input line 4448. +Package hyperref Info: Hyper index ON on input line 4451. +Package hyperref Info: Plain pages OFF on input line 4458. +Package hyperref Info: Backreferencing OFF on input line 4463. +Package hyperref Info: Implicit mode ON; LaTeX internals redefined. +Package hyperref Info: Bookmarks ON on input line 4688. +\c@Hy@tempcnt=\count118 + +(/usr/share/texlive/texmf-dist/tex/latex/url/url.sty +\Urlmuskip=\muskip11 +Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc. +) +LaTeX Info: Redefining \url on input line 5041. +\XeTeXLinkMargin=\dimen136 +\Fld@menulength=\count119 +\Field@Width=\dimen137 +\Fld@charsize=\dimen138 +Package hyperref Info: Hyper figures OFF on input line 6295. +Package hyperref Info: Link nesting OFF on input line 6300. +Package hyperref Info: Hyper index ON on input line 6303. +Package hyperref Info: backreferencing OFF on input line 6310. +Package hyperref Info: Link coloring ON on input line 6313. +Package hyperref Info: Link coloring with OCG OFF on input line 6320. +Package hyperref Info: PDF/A mode OFF on input line 6325. +LaTeX Info: Redefining \ref on input line 6365. +LaTeX Info: Redefining \pageref on input line 6369. +\Hy@abspage=\count120 +\c@Item=\count121 +\c@Hfootnote=\count122 +) + +Package hyperref Message: Driver (autodetected): hpdftex. + +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/hpdftex.def +File: hpdftex.def 2012/11/06 v6.83m Hyperref driver for pdfTeX +\Fld@listcount=\count123 +\c@bookmark@seq@number=\count124 + +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/rerunfilecheck.sty +Package: rerunfilecheck 2011/04/15 v1.7 Rerun checks for auxiliary files (HO) +Package uniquecounter Info: New unique counter `rerunfilecheck' on input line 2 +82. +) +\Hy@SectionHShift=\skip76 +) +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/hypcap.sty +Package: hypcap 2011/02/16 v1.11 Adjusting the anchors of captions (HO) +) +\DUlineblockindent=\skip77 + (./newfloat.sty +Package: newfloat 2015/09/17 v1.1-109 Defining new floating environments (AR) +) +Package newfloat Info: New float `literal-block' with options `' on input line +874. +\c@literal-block=\count125 +Package newfloat Info: float type `literal-block'=4 on input line 874. + +(/usr/share/texlive/texmf-dist/tex/latex/capt-of/capt-of.sty +Package: capt-of 2009/12/29 v0.2 standard captions outside of floats +) (./needspace.sty +Package: needspace 2010/09/12 v1.3d reserve vertical space +) +** (sphinx) defining (legacy) text style macros without \sphinx prefix +** if clashes with packages, set latex_keep_old_macro_names=False in conf.py +) (/usr/share/texlive/texmf-dist/tex/latex/multirow/multirow.sty +\bigstrutjot=\dimen139 +) +(/usr/share/texlive/texmf-dist/tex/latex/eqparbox/eqparbox.sty +Package: eqparbox 2013/03/15 v4.0 Create equal-widthed boxes +\eqp@tempdima=\skip78 +\eqp@tempdimb=\skip79 +\eqp@tabular@box=\box44 +\eqp@list@box=\box45 +\eqp@list@indent=\skip80 + +(/usr/share/texlive/texmf-dist/tex/latex/environ/environ.sty +Package: environ 2013/04/01 v0.3 A new environment syntax + +(/usr/share/texlive/texmf-dist/tex/latex/trimspaces/trimspaces.sty +Package: trimspaces 2009/09/17 v1.1 Trim spaces around a token list +))) +\@indexfile=\write5 +\openout5 = `MindstormsEV3Toolbox.idx'. + + +Writing index file MindstormsEV3Toolbox.idx +(./MindstormsEV3Toolbox.aux) +\openout1 = `MindstormsEV3Toolbox.aux'. + +LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 140. +LaTeX Font Info: ... okay on input line 140. +LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 140. +LaTeX Font Info: ... okay on input line 140. +LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 140. +LaTeX Font Info: ... okay on input line 140. +LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 140. +LaTeX Font Info: ... okay on input line 140. +LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 140. +LaTeX Font Info: ... okay on input line 140. +LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 140. +LaTeX Font Info: ... okay on input line 140. +LaTeX Font Info: Checking defaults for TS1/cmr/m/n on input line 140. +LaTeX Font Info: Try loading font information for TS1+cmr on input line 140. + + +(/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd +File: ts1cmr.fd 1999/05/25 v2.5h Standard LaTeX font definitions +) +LaTeX Font Info: ... okay on input line 140. +LaTeX Font Info: Checking defaults for PD1/pdf/m/n on input line 140. +LaTeX Font Info: ... okay on input line 140. +LaTeX Font Info: Checking defaults for PU/pdf/m/n on input line 140. +LaTeX Font Info: ... okay on input line 140. +LaTeX Font Info: Try loading font information for T1+ptm on input line 140. + +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1ptm.fd +File: t1ptm.fd 2001/06/04 font definitions for T1/ptm. +) +(/usr/share/texlive/texmf-dist/tex/context/base/supp-pdf.mkii +[Loading MPS to PDF converter (version 2006.09.02).] +\scratchcounter=\count126 +\scratchdimen=\dimen140 +\scratchbox=\box46 +\nofMPsegments=\count127 +\nofMParguments=\count128 +\everyMPshowfont=\toks32 +\MPscratchCnt=\count129 +\MPscratchDim=\dimen141 +\MPnumerator=\count130 +\makeMPintoPDFobject=\count131 +\everyMPtoPDFconversion=\toks33 +) (/usr/share/texlive/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty +Package: epstopdf-base 2010/02/09 v2.5 Base part for package epstopdf + +(/usr/share/texlive/texmf-dist/tex/latex/oberdiek/grfext.sty +Package: grfext 2010/08/19 v1.1 Manage graphics extensions (HO) +) +Package grfext Info: Graphics extension search list: +(grfext) [.png,.pdf,.jpg,.mps,.jpeg,.jbig2,.jb2,.PNG,.PDF,.JPG,.JPE +G,.JBIG2,.JB2,.eps] +(grfext) \AppendGraphicsExtensions on input line 452. + +(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg +File: epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Liv +e +)) +\AtBeginShipoutBox=\box47 +Package hyperref Info: Link coloring ON on input line 140. + +(/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty +Package: nameref 2012/10/27 v2.43 Cross-referencing by name of section + +(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty +Package: gettitlestring 2010/12/03 v1.4 Cleanup title references (HO) +) +\c@section@level=\count132 +) +LaTeX Info: Redefining \ref on input line 140. +LaTeX Info: Redefining \pageref on input line 140. +LaTeX Info: Redefining \nameref on input line 140. + +(./MindstormsEV3Toolbox.out) (./MindstormsEV3Toolbox.out) +\@outlinefile=\write6 +\openout6 = `MindstormsEV3Toolbox.out'. + +LaTeX Font Info: Try loading font information for T1+phv on input line 143. + +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1phv.fd +File: t1phv.fd 2001/06/04 scalable font definitions for T1/phv. +) +LaTeX Font Info: Font shape `T1/phv/bx/n' in size <10> not available +(Font) Font shape `T1/phv/b/n' tried instead on input line 143. +LaTeX Font Info: Font shape `T1/phv/bx/n' in size <24.88> not available +(Font) Font shape `T1/phv/b/n' tried instead on input line 143. +LaTeX Font Info: Font shape `T1/phv/bx/it' in size <10> not available +(Font) Font shape `T1/phv/b/it' tried instead on input line 143. +LaTeX Font Info: Font shape `T1/phv/b/it' in size <10> not available +(Font) Font shape `T1/phv/b/sl' tried instead on input line 143. +LaTeX Font Info: Font shape `T1/phv/bx/it' in size <17.28> not available +(Font) Font shape `T1/phv/b/it' tried instead on input line 143. +LaTeX Font Info: Font shape `T1/phv/b/it' in size <17.28> not available +(Font) Font shape `T1/phv/b/sl' tried instead on input line 143. +LaTeX Font Info: Font shape `T1/phv/bx/n' in size <17.28> not available +(Font) Font shape `T1/phv/b/n' tried instead on input line 143. +<<ot1.cmap>><<oml.cmap>><<oms.cmap>><<omx.cmap>> +LaTeX Font Info: Try loading font information for U+msa on input line 143. + +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsa.fd +File: umsa.fd 2013/01/14 v3.01 AMS symbols A +) +LaTeX Font Info: Try loading font information for U+msb on input line 143. + +(/usr/share/texlive/texmf-dist/tex/latex/amsfonts/umsb.fd +File: umsb.fd 2013/01/14 v3.01 AMS symbols B +) +LaTeX Font Info: Font shape `T1/phv/bx/n' in size <12> not available +(Font) Font shape `T1/phv/b/n' tried instead on input line 143. + [1 + +{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] [2 + +] (./MindstormsEV3Toolbox.toc +LaTeX Font Info: Font shape `T1/ptm/bx/n' in size <10> not available +(Font) Font shape `T1/ptm/b/n' tried instead on input line 2. +) +\tf@toc=\write7 +\openout7 = `MindstormsEV3Toolbox.toc'. + + [1 + +] +[2 + +] [1] [2 + +] +Chapter 1. +LaTeX Font Info: Font shape `T1/phv/bx/n' in size <14.4> not available +(Font) Font shape `T1/phv/b/n' tried instead on input line 160. +LaTeX Font Info: Font shape `T1/ptm/bx/n' in size <14.4> not available +(Font) Font shape `T1/ptm/b/n' tried instead on input line 160. +LaTeX Font Info: Font shape `T1/ptm/bx/n' in size <24.88> not available +(Font) Font shape `T1/ptm/b/n' tried instead on input line 160. +LaTeX Font Info: Try loading font information for T1+pcr on input line 179. +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/t1pcr.fd +File: t1pcr.fd 2001/06/04 font definitions for T1/pcr. +) +LaTeX Font Info: Font shape `T1/pcr/m/it' in size <9> not available +(Font) Font shape `T1/pcr/m/sl' tried instead on input line 180. +LaTeX Font Info: Try loading font information for TS1+pcr on input line 182. + + +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1pcr.fd +File: ts1pcr.fd 2001/06/04 font definitions for TS1/pcr. +) +LaTeX Font Info: Font shape `T1/pcr/bx/n' in size <10> not available +(Font) Font shape `T1/pcr/b/n' tried instead on input line 1. +LaTeX Font Info: Try loading font information for TS1+ptm on input line 208. + + +(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ts1ptm.fd +File: ts1ptm.fd 2001/06/04 font definitions for TS1/ptm. +) [3] +LaTeX Font Info: Font shape `T1/pcr/m/it' in size <10> not available +(Font) Font shape `T1/pcr/m/sl' tried instead on input line 1. + [4] +Underfull \hbox (badness 10000) in paragraph at lines 369--371 +[]\T1/pcr/b/n/10 serPort \T1/ptm/m/n/10 (\T1/pcr/m/sl/10 string in {'/dev/rfcom +m1', '/dev/rfcomm2', ...}\T1/ptm/m/n/10 ) -- + [] + +[5] +Underfull \hbox (badness 10000) in paragraph at lines 450--451 +[]\T1/pcr/b/n/10 batteryMode \T1/ptm/m/n/10 (\T1/pcr/m/sl/10 string in {'Voltag +e'/'Percentage'}\T1/ptm/m/n/10 ) -- see + [] + +[6] [7] [8] [9] [10] [11] [12] (./MindstormsEV3Toolbox.ind [13] [14 + +] [15 + +]) +Package atveryend Info: Empty hook `BeforeClearDocument' on input line 1293. +Package atveryend Info: Empty hook `AfterLastShipout' on input line 1293. + +(./MindstormsEV3Toolbox.aux) +Package atveryend Info: Executing hook `AtVeryEndDocument' on input line 1293. +Package atveryend Info: Executing hook `AtEndAfterFileList' on input line 1293. + +Package rerunfilecheck Info: File `MindstormsEV3Toolbox.out' has not changed. +(rerunfilecheck) Checksum: 22BCF1B5A3444C4A0155F0F0F4B50E6D;826. +Package atveryend Info: Empty hook `AtVeryVeryEnd' on input line 1293. + ) +Here is how much of TeX's memory you used: + 13469 strings out of 493304 + 183892 string characters out of 6139870 + 275845 words of memory out of 5000000 + 16501 multiletter control sequences out of 15000+600000 + 59422 words of font info for 78 fonts, out of 8000000 for 9000 + 958 hyphenation exceptions out of 8191 + 36i,11n,45p,527b,667s stack positions out of 5000i,500n,10000p,200000b,80000s +{/usr/share/texlive/texmf-dist/fonts/enc/dvips/base/8r.enc}</usr/share/texliv +e/texmf-dist/fonts/type1/urw/courier/ucrb8a.pfb></usr/share/texlive/texmf-dist/ +fonts/type1/urw/courier/ucrr8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/u +rw/courier/ucrro8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/helvetic/ +uhvb8a.pfb></usr/share/texlive/texmf-dist/fonts/type1/urw/helvetic/uhvbo8a.pfb> +</usr/share/texlive/texmf-dist/fonts/type1/urw/helvetic/uhvr8a.pfb></usr/share/ +texlive/texmf-dist/fonts/type1/urw/times/utmb8a.pfb></usr/share/texlive/texmf-d +ist/fonts/type1/urw/times/utmr8a.pfb></usr/share/texlive/texmf-dist/fonts/type1 +/urw/times/utmri8a.pfb> +Output written on MindstormsEV3Toolbox.pdf (19 pages, 147194 bytes). +PDF statistics: + 374 PDF objects out of 1000 (max. 8388607) + 335 compressed objects within 4 object streams + 115 named destinations out of 1000 (max. 500000) + 93 words of extra memory for PDF output out of 10000 (max. 10000000) + diff --git a/docs/_build/latex/MindstormsEV3Toolbox.out b/docs/_build/latex/MindstormsEV3Toolbox.out new file mode 100644 index 0000000000000000000000000000000000000000..a3656293d1a5d4a6b281fe33e068efefbe2c3eb8 --- /dev/null +++ b/docs/_build/latex/MindstormsEV3Toolbox.out @@ -0,0 +1,9 @@ +\BOOKMARK [0][-]{chapter.1}{\376\377\000C\000o\000n\000t\000e\000n\000t\000s}{}% 1 +\BOOKMARK [1][-]{section.1.1}{\376\377\000G\000e\000n\000e\000r\000a\000l}{chapter.1}% 2 +\BOOKMARK [1][-]{section.1.2}{\376\377\000E\000x\000a\000m\000p\000l\000e\000s}{chapter.1}% 3 +\BOOKMARK [1][-]{section.1.3}{\376\377\000E\000V\0003}{chapter.1}% 4 +\BOOKMARK [1][-]{section.1.4}{\376\377\000M\000o\000t\000o\000r}{chapter.1}% 5 +\BOOKMARK [1][-]{section.1.5}{\376\377\000S\000e\000n\000s\000o\000r}{chapter.1}% 6 +\BOOKMARK [1][-]{section.1.6}{\376\377\000C\000o\000m\000m\000a\000n\000d\000L\000a\000y\000e\000r}{chapter.1}% 7 +\BOOKMARK [1][-]{section.1.7}{\376\377\000C\000o\000m\000m\000u\000n\000i\000c\000a\000t\000i\000o\000n\000L\000a\000y\000e\000r}{chapter.1}% 8 +\BOOKMARK [0][-]{section*.80}{\376\377\000I\000n\000d\000e\000x}{}% 9 diff --git a/docs/_build/latex/MindstormsEV3Toolbox.pdf b/docs/_build/latex/MindstormsEV3Toolbox.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9cdd0866b3af5daeedf5e982750691f77aeb284c Binary files /dev/null and b/docs/_build/latex/MindstormsEV3Toolbox.pdf differ diff --git a/docs/_build/latex/MindstormsEV3Toolbox.tex b/docs/_build/latex/MindstormsEV3Toolbox.tex new file mode 100644 index 0000000000000000000000000000000000000000..40579d2915147349fd4b132ed553a93cb45bc90a --- /dev/null +++ b/docs/_build/latex/MindstormsEV3Toolbox.tex @@ -0,0 +1,1293 @@ +% Generated by Sphinx. +\def\sphinxdocclass{report} +\newif\ifsphinxKeepOldNames \sphinxKeepOldNamestrue +\documentclass[letterpaper,10pt,english]{sphinxmanual} +\usepackage{iftex} + +\ifPDFTeX + \usepackage[utf8]{inputenc} +\fi +\ifdefined\DeclareUnicodeCharacter + \DeclareUnicodeCharacter{00A0}{\nobreakspace} +\fi +\usepackage{cmap} +\usepackage[T1]{fontenc} +\usepackage{amsmath,amssymb,amstext} +\usepackage{babel} +\usepackage{times} +\usepackage[Bjarne]{fncychap} +\usepackage{longtable} +\usepackage{sphinx} +\usepackage{multirow} +\usepackage{eqparbox} + + +\addto\captionsenglish{\renewcommand{\figurename}{Fig.\@ }} +\addto\captionsenglish{\renewcommand{\tablename}{Table }} +\SetupFloatingEnvironment{literal-block}{name=Listing } + +\addto\extrasenglish{\def\pageautorefname{page}} + +\setcounter{tocdepth}{1} + + +\title{Mindstorms EV3 Toolbox Documentation} +\date{Feb 23, 2017} +\release{v0.4-rc.10} +\author{LfB - RWTH Aachen} +\newcommand{\sphinxlogo}{} +\renewcommand{\releasename}{Release} +\makeindex + +\makeatletter +\def\PYG@reset{\let\PYG@it=\relax \let\PYG@bf=\relax% + \let\PYG@ul=\relax \let\PYG@tc=\relax% + \let\PYG@bc=\relax \let\PYG@ff=\relax} +\def\PYG@tok#1{\csname PYG@tok@#1\endcsname} +\def\PYG@toks#1+{\ifx\relax#1\empty\else% + \PYG@tok{#1}\expandafter\PYG@toks\fi} +\def\PYG@do#1{\PYG@bc{\PYG@tc{\PYG@ul{% + \PYG@it{\PYG@bf{\PYG@ff{#1}}}}}}} +\def\PYG#1#2{\PYG@reset\PYG@toks#1+\relax+\PYG@do{#2}} + +\expandafter\def\csname PYG@tok@gd\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.63,0.00,0.00}{##1}}} +\expandafter\def\csname PYG@tok@gu\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.50,0.00,0.50}{##1}}} +\expandafter\def\csname PYG@tok@gt\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.27,0.87}{##1}}} +\expandafter\def\csname PYG@tok@gs\endcsname{\let\PYG@bf=\textbf} +\expandafter\def\csname PYG@tok@gr\endcsname{\def\PYG@tc##1{\textcolor[rgb]{1.00,0.00,0.00}{##1}}} +\expandafter\def\csname PYG@tok@cm\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}} +\expandafter\def\csname PYG@tok@vg\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}} +\expandafter\def\csname PYG@tok@vi\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}} +\expandafter\def\csname PYG@tok@mh\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}} +\expandafter\def\csname PYG@tok@cs\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}\def\PYG@bc##1{\setlength{\fboxsep}{0pt}\colorbox[rgb]{1.00,0.94,0.94}{\strut ##1}}} +\expandafter\def\csname PYG@tok@ge\endcsname{\let\PYG@it=\textit} +\expandafter\def\csname PYG@tok@vc\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}} +\expandafter\def\csname PYG@tok@il\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}} +\expandafter\def\csname PYG@tok@go\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.20,0.20,0.20}{##1}}} +\expandafter\def\csname PYG@tok@cp\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@gi\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.63,0.00}{##1}}} +\expandafter\def\csname PYG@tok@gh\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.00,0.50}{##1}}} +\expandafter\def\csname PYG@tok@ni\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.84,0.33,0.22}{##1}}} +\expandafter\def\csname PYG@tok@nl\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.13,0.44}{##1}}} +\expandafter\def\csname PYG@tok@nn\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.05,0.52,0.71}{##1}}} +\expandafter\def\csname PYG@tok@no\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.38,0.68,0.84}{##1}}} +\expandafter\def\csname PYG@tok@na\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@nb\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@nc\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.05,0.52,0.71}{##1}}} +\expandafter\def\csname PYG@tok@nd\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.33,0.33,0.33}{##1}}} +\expandafter\def\csname PYG@tok@ne\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@nf\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.02,0.16,0.49}{##1}}} +\expandafter\def\csname PYG@tok@si\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.44,0.63,0.82}{##1}}} +\expandafter\def\csname PYG@tok@s2\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@nt\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.02,0.16,0.45}{##1}}} +\expandafter\def\csname PYG@tok@nv\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.38,0.84}{##1}}} +\expandafter\def\csname PYG@tok@s1\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@ch\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}} +\expandafter\def\csname PYG@tok@m\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}} +\expandafter\def\csname PYG@tok@gp\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.78,0.36,0.04}{##1}}} +\expandafter\def\csname PYG@tok@sh\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@ow\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@sx\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.78,0.36,0.04}{##1}}} +\expandafter\def\csname PYG@tok@bp\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@c1\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}} +\expandafter\def\csname PYG@tok@o\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.40,0.40,0.40}{##1}}} +\expandafter\def\csname PYG@tok@kc\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@c\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}} +\expandafter\def\csname PYG@tok@mf\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}} +\expandafter\def\csname PYG@tok@err\endcsname{\def\PYG@bc##1{\setlength{\fboxsep}{0pt}\fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}} +\expandafter\def\csname PYG@tok@mb\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}} +\expandafter\def\csname PYG@tok@ss\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.32,0.47,0.09}{##1}}} +\expandafter\def\csname PYG@tok@sr\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.14,0.33,0.53}{##1}}} +\expandafter\def\csname PYG@tok@mo\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}} +\expandafter\def\csname PYG@tok@kd\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@mi\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.13,0.50,0.31}{##1}}} +\expandafter\def\csname PYG@tok@kn\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@cpf\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}} +\expandafter\def\csname PYG@tok@kr\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@s\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@kp\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@w\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.73,0.73,0.73}{##1}}} +\expandafter\def\csname PYG@tok@kt\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.56,0.13,0.00}{##1}}} +\expandafter\def\csname PYG@tok@sc\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@sb\endcsname{\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@k\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.00,0.44,0.13}{##1}}} +\expandafter\def\csname PYG@tok@se\endcsname{\let\PYG@bf=\textbf\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} +\expandafter\def\csname PYG@tok@sd\endcsname{\let\PYG@it=\textit\def\PYG@tc##1{\textcolor[rgb]{0.25,0.44,0.63}{##1}}} + +\def\PYGZbs{\char`\\} +\def\PYGZus{\char`\_} +\def\PYGZob{\char`\{} +\def\PYGZcb{\char`\}} +\def\PYGZca{\char`\^} +\def\PYGZam{\char`\&} +\def\PYGZlt{\char`\<} +\def\PYGZgt{\char`\>} +\def\PYGZsh{\char`\#} +\def\PYGZpc{\char`\%} +\def\PYGZdl{\char`\$} +\def\PYGZhy{\char`\-} +\def\PYGZsq{\char`\'} +\def\PYGZdq{\char`\"} +\def\PYGZti{\char`\~} +% for compatibility with earlier versions +\def\PYGZat{@} +\def\PYGZlb{[} +\def\PYGZrb{]} +\makeatother + +\renewcommand\PYGZsq{\textquotesingle} + +\begin{document} + +\maketitle +\tableofcontents +\phantomsection\label{index::doc} + + +This MATLAB toolbox was designed to abstract and simplify controlling Lego Mindstorms +EV3 robots. Via Bluetooth or USB you can read sensor values or control +your robots' motors in an intuitive way. On a low level (the {\hyperref[CommunicationLayer::doc]{\sphinxcrossref{\DUrole{doc}{Communication +layer}}}}) you are able to send various commands directly to the brick, while on a high level, +several classes abstract this behaviour for you. If you want to easily access your EV3 robot, +these are the classes you will mostly use. + +To get started, take a look at the {\hyperref[readme::doc]{\sphinxcrossref{\DUrole{doc}{installation instructions}}}} and {\hyperref[examples::doc]{\sphinxcrossref{\DUrole{doc}{examples}}}}. + +This toolbox is being developed at the RWTH Aachen, Germany, as part of the students' lab +`MATLAB meets Mindstorms'. It is the follow-up of the \href{http://www.mindstorms.rwth-aachen.de/trac/}{MATLAB NXT Toolbox}. + + +\chapter{Contents} +\label{index:matlab-nxt-toolbox}\label{index:contents}\label{index:matlab-toolbox-for-controlling-lego-mindstorms-ev3} +Setting up the toolbox + + +\section{General} +\label{readme::doc}\label{readme:general} + +\subsection{Installation} +\label{readme:installation} + +\subsection{Contribution} +\label{readme:contribution} + +\subsection{Licenses} +\label{readme:licenses} + +\section{Examples} +\label{examples::doc}\label{examples:examples} +\begin{Verbatim}[commandchars=\\\{\}] +\PYG{c}{\PYGZpc{} This example expects a motor at port A and a (random) sensor at port 1} +\PYG{n}{b} \PYG{p}{=} \PYG{n}{EV3}\PYG{p}{(}\PYG{p}{)}\PYG{p}{;} +\PYG{n}{b}\PYG{p}{.}\PYG{n}{connect}\PYG{p}{(}\PYG{l+s}{\PYGZsq{}}\PYG{l+s}{usb\PYGZsq{}}\PYG{p}{)}\PYG{p}{;} +\PYG{n}{ma} \PYG{p}{=} \PYG{n}{b}\PYG{p}{.}\PYG{n}{motorA}\PYG{p}{;} +\PYG{n}{ma}\PYG{p}{.}\PYG{n}{setProperties}\PYG{p}{(}\PYG{l+s}{\PYGZsq{}}\PYG{l+s}{power\PYGZsq{}}\PYG{p}{,} \PYG{l+m+mi}{50}\PYG{p}{,} \PYG{l+s}{\PYGZsq{}}\PYG{l+s}{limitValue\PYGZsq{}}\PYG{p}{,} \PYG{l+m+mi}{720}\PYG{p}{)}\PYG{p}{;} +\PYG{n}{ma}\PYG{p}{.}\PYG{n}{start}\PYG{p}{(}\PYG{p}{)}\PYG{p}{;} +\PYG{c}{\PYGZpc{} fun} +\PYG{n}{ma}\PYG{p}{.}\PYG{n}{waitFor}\PYG{p}{(}\PYG{p}{)}\PYG{p}{;} +\PYG{n+nb}{disp}\PYG{p}{(}\PYG{n}{b}\PYG{p}{.}\PYG{n}{sensor1}\PYG{p}{.}\PYG{n}{value}\PYG{p}{)}\PYG{p}{;} +\PYG{n}{b}\PYG{p}{.}\PYG{n}{beep}\PYG{p}{(}\PYG{p}{)}\PYG{p}{;} +\PYG{n}{b}\PYG{p}{.}\PYG{n}{delete}\PYG{p}{(}\PYG{p}{)}\PYG{p}{;} +\end{Verbatim} + +Toolbox documentation +\phantomsection\label{EV3:module-source}\index{source (module)} + +\section{EV3} +\label{EV3:ev3}\label{EV3::doc}\index{EV3 (class in source)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3}\pysiglinewithargsret{\sphinxstrong{class }\sphinxcode{source.}\sphinxbfcode{EV3}}{\emph{varargin}}{} +High-level class to work with physical bricks. + +This is the `central' class (from user's view) when working with this toolbox. It +delivers a convenient interface for creating a connection to the brick and sending +commands to it. An EV3-object creates 4 Motor- and 4 Sensor-objects, one for each port. +\paragraph{Notes} +\begin{itemize} +\item {} +Creating multiple EV3 objects and connecting them to different physical bricks has not +been thoroughly tested yet, but seems to work on a first glance. + +\item {} +When an input argument of a method is marked as optional, the argument needs to be +`announced' by a preceding 2nd argument, which is a string containing the name of the argument. +For example, Motor.setProperties may be given a power-parameter. The syntax would be as +follows: \emph{brickObject.motorA.setProperties(`power', 50);} + +\end{itemize} +\index{motorA (source.EV3 attribute)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.motorA}\pysigline{\sphinxbfcode{motorA}} +\emph{Motor} -- Motor-object interfacing port A. See also {\hyperref[Motor:source.Motor]{\sphinxcrossref{\sphinxcode{Motor}}}}. + +\end{fulllineitems} + +\index{motorB (source.EV3 attribute)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.motorB}\pysigline{\sphinxbfcode{motorB}} +\emph{Motor} -- Motor-object interfacing port B. See also {\hyperref[Motor:source.Motor]{\sphinxcrossref{\sphinxcode{Motor}}}}. + +\end{fulllineitems} + +\index{motorC (source.EV3 attribute)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.motorC}\pysigline{\sphinxbfcode{motorC}} +\emph{Motor} -- Motor-object interfacing port C. See also {\hyperref[Motor:source.Motor]{\sphinxcrossref{\sphinxcode{Motor}}}}. + +\end{fulllineitems} + +\index{motorD (source.EV3 attribute)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.motorD}\pysigline{\sphinxbfcode{motorD}} +\emph{Motor} -- Motor-object interfacing port D. See also {\hyperref[Motor:source.Motor]{\sphinxcrossref{\sphinxcode{Motor}}}}. + +\end{fulllineitems} + +\index{sensor1 (source.EV3 attribute)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.sensor1}\pysigline{\sphinxbfcode{sensor1}} +\emph{Sensor} -- Motor-object interfacing port 1. See also {\hyperref[Sensor:source.Sensor]{\sphinxcrossref{\sphinxcode{Sensor}}}}. + +\end{fulllineitems} + +\index{sensor2 (source.EV3 attribute)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.sensor2}\pysigline{\sphinxbfcode{sensor2}} +\emph{Sensor} -- Motor-object interfacing port 2. See also {\hyperref[Sensor:source.Sensor]{\sphinxcrossref{\sphinxcode{Sensor}}}}. + +\end{fulllineitems} + +\index{sensor3 (source.EV3 attribute)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.sensor3}\pysigline{\sphinxbfcode{sensor3}} +\emph{Sensor} -- Motor-object interfacing port 3. See also {\hyperref[Sensor:source.Sensor]{\sphinxcrossref{\sphinxcode{Sensor}}}}. + +\end{fulllineitems} + +\index{sensor4 (source.EV3 attribute)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.sensor4}\pysigline{\sphinxbfcode{sensor4}} +\emph{Sensor} -- Motor-object interfacing port 4. See also {\hyperref[Sensor:source.Sensor]{\sphinxcrossref{\sphinxcode{Sensor}}}}. + +\end{fulllineitems} + +\index{debug (source.EV3 attribute)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.debug}\pysigline{\sphinxbfcode{debug}} +\emph{numeric in \{0,1,2\}} -- Debug mode. \emph{{[}WRITABLE{]}} +\begin{itemize} +\item {} +0: Debug turned off + +\item {} +1: Debug turned on for EV3-object -\textgreater{} enables feedback in the console about what firmware-commands have been called when using a method + +\item {} +2: Low-level-Debug turned on -\textgreater{} each packet sent and received is printed to the console + +\end{itemize} + +\end{fulllineitems} + +\index{batteryMode (source.EV3 attribute)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.batteryMode}\pysigline{\sphinxbfcode{batteryMode}} +\emph{string in \{`Percentage', `Voltage'\}} -- Mode for reading battery charge. See also \sphinxcode{batteryValue}. \emph{{[}WRITABLE{]}} + +\end{fulllineitems} + +\index{batteryValue (source.EV3 attribute)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.batteryValue}\pysigline{\sphinxbfcode{batteryValue}} +\emph{numeric} -- Current battery charge. Depending on batteryMode, the reading is either in percentage or voltage. See also \sphinxcode{batteryMode}. \emph{{[}READ-ONLY{]}} + +\end{fulllineitems} + +\index{isConnected (source.EV3 attribute)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.isConnected}\pysigline{\sphinxbfcode{isConnected}} +\emph{bool} -- True if virtual brick-object is connected to physical one. \emph{{[}READ-ONLY{]}} + +\end{fulllineitems} + +\paragraph{Example} + +\% This example expects a motor at port A and a (random) sensor at port 1 +b = EV3(); \% +b.connect(`usb'); \% +ma = b.motorA; \% +ma.setProperties(`power', 50, `limitValue', 720); \% +ma.start(); \% +\% fun +ma.waitFor(); \% +disp(b.sensor1.value); \% +b.beep(); \% +delete b; \% +\index{beep() (source.EV3 method)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.beep}\pysiglinewithargsret{\sphinxbfcode{beep}}{\emph{ev3}}{} +Plays a `beep'-tone on brick. +\paragraph{Notes} +\begin{itemize} +\item {} +This equals playTone(10, 1000, 100). + +\end{itemize} +\paragraph{Example} + +b = EV3(); \% +b.connect(`bt', `serPort', `/dev/rfcomm0'); \% +b.beep(); \% + +\end{fulllineitems} + +\index{connect() (source.EV3 method)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.connect}\pysiglinewithargsret{\sphinxbfcode{connect}}{\emph{ev3}, \emph{varargin}}{} +Connects EV3-object and its Motors and Sensors to physical brick. +\begin{quote}\begin{description} +\item[{Parameters}] \leavevmode\begin{itemize} +\item {} +\textbf{\texttt{connectionType}} (\emph{\texttt{string in \{'bt', 'usb'\}}}) -- Connection type + +\item {} +\textbf{\texttt{serPort}} (\emph{\texttt{string in \{'/dev/rfcomm1', '/dev/rfcomm2', ...\}}}) -- Path to serial port +(necessary if connectionType is `bt'). \emph{{[}OPTIONAL{]}} + +\item {} +\textbf{\texttt{beep}} (\emph{\texttt{bool}}) -- If true, EV3 beeps if connection has been established. \emph{{[}OPTIONAL{]}} + +\end{itemize} + +\end{description}\end{quote} +\paragraph{Example} + +\% Setup bluetooth connection via com-port 0 +b = EV3(); \% +b.connect(`bt', `serPort', `/dev/rfcomm0'); \% +\% Setup usb connection, beep when connection has been established +b = EV3(); \% +b.connect(`usb', `beep', `on', ); \% + +See also ISCONNECTED / \sphinxcode{isConnected} + +\end{fulllineitems} + +\index{disconnect() (source.EV3 method)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.disconnect}\pysiglinewithargsret{\sphinxbfcode{disconnect}}{\emph{ev3}}{} +Disconnects EV3-object and its Motors and Sensors from physical brick. +\paragraph{Notes} +\begin{itemize} +\item {} +Gets called automatically when EV3-object is destroyed. + +\end{itemize} +\paragraph{Example} + +b = EV3(); \% +b.connect(`bt', `serPort', `/dev/rfcomm0'); \% +\% do stuff +b.disconnect(); \% + +\end{fulllineitems} + +\index{playTone() (source.EV3 method)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.playTone}\pysiglinewithargsret{\sphinxbfcode{playTone}}{\emph{ev3}, \emph{volume}, \emph{frequency}, \emph{duration}}{} +Plays tone on brick. +\begin{quote}\begin{description} +\item[{Parameters}] \leavevmode\begin{itemize} +\item {} +\textbf{\texttt{volume}} (\emph{\texttt{numeric in {[}0, 100{]}}}) -- in percent + +\item {} +\textbf{\texttt{frequency}} (\emph{\texttt{numeric in {[}250, 10000{]}}}) -- in Hertz + +\item {} +\textbf{\texttt{duration}} (\emph{\texttt{numeric \textgreater{}0}}) -- in milliseconds + +\end{itemize} + +\end{description}\end{quote} +\paragraph{Example} + +b = EV3(); \% +b.connect(`bt', `serPort', `/dev/rfcomm0'); \% +b.playTone(40, 5000, 1000); \% Plays tone with 40\% volume and 5000Hz for 1 +second. + +\end{fulllineitems} + +\index{setProperties() (source.EV3 method)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.setProperties}\pysiglinewithargsret{\sphinxbfcode{setProperties}}{\emph{ev3}, \emph{varargin}}{} +Set multiple EV3 properties at once using MATLAB's inputParser. +\begin{quote}\begin{description} +\item[{Parameters}] \leavevmode\begin{itemize} +\item {} +\textbf{\texttt{debug}} (\emph{\texttt{numeric in \{0,1,2\}}}) -- see EV3.debug \emph{{[}OPTIONAL{]}} + +\item {} +\textbf{\texttt{batteryMode}} (\emph{\texttt{string in \{'Voltage'/'Percentage'\}}}) -- see EV3.batteryMode \emph{{[}OPTIONAL{]}} + +\end{itemize} + +\end{description}\end{quote} +\paragraph{Example} + +b = EV3(); \% +b.connect(`bt', `serPort', `/dev/rfcomm0'); \% +b.setProperties(`debug', `on', `batteryMode', `Voltage'); \% +\% Instead of: b.debug = `on'; b.batteryMode = `Voltage'; \% + +See also EV3.DEBUG, EV3.BATTERYMODE / \sphinxcode{debug}, \sphinxcode{batteryMode} + +\end{fulllineitems} + +\index{stopAllMotors() (source.EV3 method)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.stopAllMotors}\pysiglinewithargsret{\sphinxbfcode{stopAllMotors}}{\emph{ev3}}{} +Sends a stop-command to all motor-ports. + +\end{fulllineitems} + +\index{stopTone() (source.EV3 method)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.stopTone}\pysiglinewithargsret{\sphinxbfcode{stopTone}}{\emph{ev3}}{} +Stops tone currently played. +\paragraph{Example} + +b = EV3(); \% +b.connect(`bt', `serPort', `/dev/rfcomm0'); \% +b.playTone(10,100,100000000); \% Accidentally given wrong tone duration :) +b.stopTone(); \% Stops tone immediately. + +\end{fulllineitems} + +\index{tonePlayed() (source.EV3 method)} + +\begin{fulllineitems} +\phantomsection\label{EV3:source.EV3.tonePlayed}\pysiglinewithargsret{\sphinxbfcode{tonePlayed}}{\emph{ev3}}{} +Tests if tone is currently played. +\begin{quote}\begin{description} +\item[{Returns}] \leavevmode +\textbf{status} -- True if a tone is being played + +\item[{Return type}] \leavevmode +bool + +\end{description}\end{quote} +\begin{description} +\item[{Example}] \leavevmode +b = EV3(); \% +b.connect(`bt', `serPort', `/dev/rfcomm0'); \% +b.playTone(10, 100, 1000); \% +pause(0.5); \% Small pause is necessary as tone does not start instantaneously +b.tonePlayed(); \% -\textgreater{} Outputs 1 to console. + +\end{description} + +\end{fulllineitems} + + +\end{fulllineitems} + +\phantomsection\label{Motor:module-source}\index{source (module)} + +\section{Motor} +\label{Motor::doc}\label{Motor:motor}\index{Motor (class in source)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor}\pysiglinewithargsret{\sphinxstrong{class }\sphinxcode{source.}\sphinxbfcode{Motor}}{\emph{varargin}}{} +High-level class to work with motors. + +This class is supposed to ease the use of the brick's motors. It is possible to set all +kinds of parameters, request the current status of the motor ports and of course send +commands to the brick to be executed on the respective port. +\paragraph{Notes} +\begin{itemize} +\item {} +You don't need to create instances of this class. The EV3-class automatically creates +instances for each motor port, and you can work with them via the EV3-object. + +\item {} +The Motor-class represents motor ports, not individual motors! + +\item {} +If you start a motor with power=0, the internal state will still be set to +`isRunning' + +\item {} +When an input argument of a method is marked as optional, the argument needs to be +`announced' by a preceding 2nd argument, which is a string containing the name of the argument. +For example, Motor.setProperties may be given a power-parameter. The syntax would be as +follows: \emph{brickObject.motorA.setProperties(`power', 50);} + +\end{itemize} +\index{power (source.Motor attribute)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.power}\pysigline{\sphinxbfcode{power}} +\emph{numeric in {[}-100, 100{]}} -- Power level of motor in percent. \emph{{[}WRITABLE{]}} + +\end{fulllineitems} + +\index{speedRegulation (source.Motor attribute)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.speedRegulation}\pysigline{\sphinxbfcode{speedRegulation}} +\emph{bool} -- Speed regulation turned on or off. When turned on, motor will +try to `hold' its speed at given power level, whatever the load. In this mode, the +highest possible speed depends on the load and mostly goes up to around 70-80 (at +this point, the Brick internally inputs 100\% power). When turned off, motor will +constantly input the same power into the motor. The resulting speed will be +somewhat lower, depending on the load. \emph{{[}WRITABLE{]}} + +\end{fulllineitems} + +\index{smoothStart (source.Motor attribute)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.smoothStart}\pysigline{\sphinxbfcode{smoothStart}} +\emph{numeric s. t. smoothStart+smoothStop \textless{} limitValue} -- Degrees/Time +indicating how far/long the motor should smoothly start. Depending on limitMode, +the input is interpreted either in degrees or milliseconds. The first +\{smoothStart\}-milliseconds/degrees of limitValue the motor will slowly accelerate +until reaching its defined speed. See also {\hyperref[Motor:source.Motor.limitValue]{\sphinxcrossref{\sphinxcode{limitValue}}}}, {\hyperref[Motor:source.Motor.limitMode]{\sphinxcrossref{\sphinxcode{limitMode}}}}. \emph{{[}WRITABLE{]}} + +\end{fulllineitems} + +\index{smoothStop (source.Motor attribute)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.smoothStop}\pysigline{\sphinxbfcode{smoothStop}} +\emph{numeric s. t. smoothStart+smoothStop \textless{} limitValue} -- Degrees/Time +indicating how far/long the motor should smoothly stop. Depending on limitMode, the +input is interpreted either in degrees or milliseconds. The last +{[}smoothStop{]}-milliseconds/degrees of limitValue the motor will slowly slow down +until it has stopped. See also {\hyperref[Motor:source.Motor.limitValue]{\sphinxcrossref{\sphinxcode{limitValue}}}}, {\hyperref[Motor:source.Motor.limitMode]{\sphinxcrossref{\sphinxcode{limitMode}}}}. \emph{{[}WRITABLE{]}} + +\end{fulllineitems} + +\index{limitValue (source.Motor attribute)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.limitValue}\pysigline{\sphinxbfcode{limitValue}} +\emph{numeric\textgreater{}=0} -- Degrees/Time indicating how far/long the motor should run. +Depending on limitMode, the input is interpreted either in degrees or +milliseconds. See also {\hyperref[Motor:source.Motor.limitMode]{\sphinxcrossref{\sphinxcode{limitMode}}}}. \emph{{[}WRITABLE{]}} + +\end{fulllineitems} + +\index{limitMode (source.Motor attribute)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.limitMode}\pysigline{\sphinxbfcode{limitMode}} +\emph{`Tacho'\textbar{}'Time'} -- Mode for motor limit. See also {\hyperref[Motor:source.Motor.limitValue]{\sphinxcrossref{\sphinxcode{limitValue}}}}. \emph{{[}WRITABLE{]}} + +\end{fulllineitems} + +\index{brakeMode (source.Motor attribute)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.brakeMode}\pysigline{\sphinxbfcode{brakeMode}} +\emph{`Brake'\textbar{}'Coast'} -- Action done when stopping. If `Coast', the motor will (at +tacholimit, if \textasciitilde{}=0) coast to a stop. If `Brake', the motor will stop immediately +(at tacholimit, if \textasciitilde{}=0) and hold the brake. \emph{{[}WRITABLE{]}} + +\end{fulllineitems} + +\index{debug (source.Motor attribute)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.debug}\pysigline{\sphinxbfcode{debug}} +\emph{bool} -- Debug turned on or off. In debug mode, everytime a command is passed to +the sublayer (`communication layer'), there is feedback in the console about what +command has been called. \emph{{[}WRITABLE{]}} + +\end{fulllineitems} + +\index{isRunning (source.Motor attribute)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.isRunning}\pysigline{\sphinxbfcode{isRunning}} +\emph{bool} -- True if motor is running. \emph{{[}READ-ONLY{]}} + +\end{fulllineitems} + +\index{tachoCount (source.Motor attribute)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.tachoCount}\pysigline{\sphinxbfcode{tachoCount}} +\emph{numeric} -- Current tacho count in degrees. \emph{{[}READ-ONLY{]}} + +\end{fulllineitems} + +\index{currentSpeed (source.Motor attribute)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.currentSpeed}\pysigline{\sphinxbfcode{currentSpeed}} +\emph{numeric} -- Current speed of motor. If speedRegulation=on this should equal power, +otherwise it will probably be lower than that. See also {\hyperref[Motor:source.Motor.speedRegulation]{\sphinxcrossref{\sphinxcode{speedRegulation}}}}. \emph{{[}READ-ONLY{]}} + +\end{fulllineitems} + +\index{type (source.Motor attribute)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.type}\pysigline{\sphinxbfcode{type}} +\emph{DeviceType} -- Type of connected device if any. \emph{{[}READ-ONLY{]}} + +\end{fulllineitems} + +\index{internalReset() (source.Motor method)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.internalReset}\pysiglinewithargsret{\sphinxbfcode{internalReset}}{\emph{motor}}{} +Resets internal tacho count. Use this if motor behaves weird (i.e. not starting at all, or not correctly +running to limitValue). + +The internal tacho count is used for positioning the motor. When the +motor is running with a tacho limit, internally it uses another counter than the +one read by tachoCount. This internal tacho count needs to be reset if you +physically change the motor's position or it coasted into a stop. If the motor's +brakemode is `Coast', this function is called automatically. +\paragraph{Notes} +\begin{itemize} +\item {} +A better name would probably be resetPosition... + +\item {} +Gets called automatically when starting the motor and the internal tacho count is \textgreater{} 0 + +\end{itemize} + +See also MOTOR.RESETTACHOCOUNT / {\hyperref[Motor:source.Motor.resetTachoCount]{\sphinxcrossref{\sphinxcode{resetTachoCount}}}} + +\end{fulllineitems} + +\index{resetTachoCount() (source.Motor method)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.resetTachoCount}\pysiglinewithargsret{\sphinxbfcode{resetTachoCount}}{\emph{motor}}{} +Resets tachocount. + +See also MOTOR.TACHOCOUNT / {\hyperref[Motor:source.Motor.tachoCount]{\sphinxcrossref{\sphinxcode{tachoCount}}}} + +\end{fulllineitems} + +\index{setBrake() (source.Motor method)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.setBrake}\pysiglinewithargsret{\sphinxbfcode{setBrake}}{\emph{motor}, \emph{brake}}{} +Apply or release brake of motor. +\begin{quote}\begin{description} +\item[{Parameters}] \leavevmode +\textbf{\texttt{brake}} (\emph{\texttt{bool}}) -- If true, brake will be pulled + +\end{description}\end{quote} +\paragraph{Notes} +\begin{itemize} +\item {} +This method does not affect Motor.brakeMode. After the next run, the motor +will again be stopped as specified in Motor.brakeMode. + +\end{itemize} + +See also MOTOR.BRAKEMODE / {\hyperref[Motor:source.Motor.brakeMode]{\sphinxcrossref{\sphinxcode{brakeMode}}}} + +\end{fulllineitems} + +\index{setProperties() (source.Motor method)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.setProperties}\pysiglinewithargsret{\sphinxbfcode{setProperties}}{\emph{motor}, \emph{varargin}}{} +Sets multiple Motor properties at once using MATLAB's inputParser. +\begin{quote}\begin{description} +\item[{Parameters}] \leavevmode\begin{itemize} +\item {} +\textbf{\texttt{debug}} (\emph{\texttt{bool}}) -- \emph{{[}OPTIONAL{]}} + +\item {} +\textbf{\texttt{smoothStart}} (\emph{\texttt{numeric in {[}0, limitValue{]}}}) -- \emph{{[}OPTIONAL{]}} + +\item {} +\textbf{\texttt{smoothStop}} (\emph{\texttt{numeric in {[}0, limitValue{]}}}) -- \emph{{[}OPTIONAL{]}} + +\item {} +\textbf{\texttt{speedRegulation}} (\emph{\texttt{bool}}) -- \emph{{[}OPTIONAL{]}} + +\item {} +\textbf{\texttt{brakeMode}} (\emph{\texttt{'Coast'\textbar{}'Brake'}}) -- \emph{{[}OPTIONAL{]}} + +\item {} +\textbf{\texttt{limitMode}} (\emph{\texttt{'Time'\textbar{}'Tacho'}}) -- \emph{{[}OPTIONAL{]}} + +\item {} +\textbf{\texttt{limitValue}} (\emph{\texttt{numeric \textgreater{} 0}}) -- \emph{{[}OPTIONAL{]}} + +\item {} +\textbf{\texttt{power}} (\emph{\texttt{numeric in {[}-100,100{]}}}) -- \emph{{[}OPTIONAL{]}} + +\item {} +\textbf{\texttt{batteryMode}} (\emph{\texttt{'Voltage'\textbar{}'Percentage'}}) -- \emph{{[}OPTIONAL{]}} + +\end{itemize} + +\end{description}\end{quote} +\paragraph{Example} + +b = EV3(); \% +b.connect(`bt', `serPort', `/dev/rfcomm0'); \% +b.motorA.setProperties(`debug', `on', `power', 50, `limitValue', 720, `speedRegulation', `on'); \% +\% Instead of: b.motorA.debug = `on'; +\% b.motorA.power = 50; +\% b.motorA.limitValue = 720; +\% b.motorA.speedRegulation = `on'; + +\end{fulllineitems} + +\index{start() (source.Motor method)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.start}\pysiglinewithargsret{\sphinxbfcode{start}}{\emph{motor}}{} +Starts the motor. + +\end{fulllineitems} + +\index{stop() (source.Motor method)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.stop}\pysiglinewithargsret{\sphinxbfcode{stop}}{\emph{motor}}{} +Stops the motor. +\paragraph{Notes} +\begin{itemize} +\item {} +If this motor has been started synced with another one (either as master or +slave, using Motor.syncedStart), syncedStop() will be called, stopping both +motors. + +\end{itemize} + +See also MOTOR.START, MOTOR.SYNCEDSTOP / {\hyperref[Motor:source.Motor.start]{\sphinxcrossref{\sphinxcode{start()}}}}, {\hyperref[Motor:source.Motor.syncedStop]{\sphinxcrossref{\sphinxcode{syncedStop()}}}} + +\end{fulllineitems} + +\index{syncedStart() (source.Motor method)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.syncedStart}\pysiglinewithargsret{\sphinxbfcode{syncedStart}}{\emph{motor}, \emph{syncMotor}, \emph{varargin}}{} +Starts this motor synchronized with another. + +The motor, with which this method is called, acts as a \emph{master}, meaning that the +synchronized control is done with it und uses its parameters. When syncedStart is +called, the master sets some of the slave's (syncMotor) properties to keep it +consistent with the physical brick. So, for example, if the master has another +power-value than the slave, the slave's power-value will be set to that of the +master when syncedStart() is called. +The following parameters will be affected on the slave: \emph{power}, \emph{brakeMode}, +\emph{limitValue}, \emph{speedRegulation} +\begin{quote}\begin{description} +\item[{Parameters}] \leavevmode\begin{itemize} +\item {} +\textbf{\texttt{syncMotor}} (\emph{\texttt{Motor}}) -- The motor-object to sync with + +\item {} +\textbf{\texttt{turnRatio}} (\emph{\texttt{numeric in {[}-200,200{]}}}) -- Ratio between the two master's and the +slave's motor speed. With values!=0 one motor will be slower than the other +or even turn into the other direction. This can be used for turning car-like +robots, for example. \emph{{[}OPTIONAL{]}} (Read in Firmware-comments in c\_output.c): +-\textgreater{} 0 is moving straight forward +-\textgreater{} Negative values turn to the left +-\textgreater{} Positive values turn to the right +-\textgreater{} Value -100 stops the left motor +-\textgreater{} Value +100 stops the right motor +-\textgreater{} Values less than -100 makes the left motor run the opposite direction of the right motor (Spin) +-\textgreater{} Values greater than +100 makes the right motor run the opposite direction of the left motor (Spin) + +\end{itemize} + +\end{description}\end{quote} +\paragraph{Notes} +\begin{itemize} +\item {} +This is a pretty `heavy' function, as it tests if both motors are +connected AND aren't running, wasting four packets, keep that in mind. + +\end{itemize} +\paragraph{Example} + +b = EV3(); \% +b.connect(`usb'); \% +m = b.motorA; \% +slave = b.motorB; \% +m.power = 50; \% +m.syncedStart(slave); \% +\% Do stuff +m.stop(); \% + +See also MOTOR.STOP, MOTOR.SYNCEDSTOP / {\hyperref[Motor:source.Motor.stop]{\sphinxcrossref{\sphinxcode{stop()}}}}, {\hyperref[Motor:source.Motor.syncedStop]{\sphinxcrossref{\sphinxcode{syncedStop()}}}} + +\end{fulllineitems} + +\index{syncedStop() (source.Motor method)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.syncedStop}\pysiglinewithargsret{\sphinxbfcode{syncedStop}}{\emph{motor}}{} +Stops both motors previously started with syncedStart. +\paragraph{Notes} +\begin{itemize} +\item {} +This method is called automatically by stop(), if the motors have been +started using syncedStart, and the regular stop-method has been called afterwards. + +\end{itemize} + +See also MOTOR.SYNCEDSTART, MOTOR.STOP / {\hyperref[Motor:source.Motor.syncedStart]{\sphinxcrossref{\sphinxcode{syncedStart()}}}}, {\hyperref[Motor:source.Motor.stop]{\sphinxcrossref{\sphinxcode{stop()}}}} + +\end{fulllineitems} + +\index{waitFor() (source.Motor method)} + +\begin{fulllineitems} +\phantomsection\label{Motor:source.Motor.waitFor}\pysiglinewithargsret{\sphinxbfcode{waitFor}}{\emph{motor}}{} +Stops execution of program as long as motor is running. +\paragraph{Notes} +\begin{itemize} +\item {} +This one's a bit tricky. The opCode which is supposed to be used here, OutputReady, +makes the brick stop sending +responses until the motor has stopped. For security reasons, in this toolbox +there is an internal timeout for receiving messages from the brick. It raises +an error if a reply takes too long, which would happen in this case. As a +workaround, there is an infinite loop that catches errors from outputReady and +continues then, until outputReady will actually finish without an error. + +\item {} +Workaround: Poll isRunning until it is false (No need to check if motor is +connected as speed correctly returns 0 if it's not) + +\end{itemize} + +\end{fulllineitems} + + +\end{fulllineitems} + +\phantomsection\label{Sensor:module-source}\index{source (module)} + +\section{Sensor} +\label{Sensor:sensor}\label{Sensor::doc}\index{Sensor (class in source)} + +\begin{fulllineitems} +\phantomsection\label{Sensor:source.Sensor}\pysiglinewithargsret{\sphinxstrong{class }\sphinxcode{source.}\sphinxbfcode{Sensor}}{\emph{varargin}}{} +High-level class to work with sensors. + +The Sensor-class facilitates the communication with sensors. This mainly consists of +reading the sensor's type and current value in a specified mode. +\paragraph{Notes} +\begin{itemize} +\item {} +You don't need to create instances of this class. The EV3-class automatically creates +instances for each sensor port, and you can work with them via the EV3-object. + +\item {} +The Sensor-class represents sensor ports, not individual sensors! + +\item {} +When an input argument of a method is marked as optional, the argument needs to be +`announced' by a preceding 2nd argument, which is a string containing the name of the argument. +For example, Motor.setProperties may be given a power-parameter. The syntax would be as +follows: \emph{brickObject.motorA.setProperties(`power', 50);} + +\end{itemize} +\index{mode (source.Sensor attribute)} + +\begin{fulllineitems} +\phantomsection\label{Sensor:source.Sensor.mode}\pysigline{\sphinxbfcode{mode}} +\emph{DeviceMode.\{Type\}} -- Sensor mode in which the value will be read. By default, mode is set to \emph{DeviceMode.Default.Undefined}. See also {\hyperref[Sensor:source.Sensor.type]{\sphinxcrossref{\sphinxcode{type}}}}. \emph{{[}WRITABLE{]}} Once a physical sensor is connected to the port \emph{and} the physical Brick is connected to the EV3-object, the allowed mode and the default mode for a Sensor-object are the following (depending on the sensor type): +\begin{itemize} +\item {} \begin{description} +\item[{Touch-Sensor:}] \leavevmode\begin{itemize} +\item {} +DeviceMode.Touch.Pushed \emph{{[}Default{]}} + +\item {} +DeviceMode.Touch.Bumps + +\end{itemize} + +\end{description} + +\item {} \begin{description} +\item[{Ultrasonic-Sensor:}] \leavevmode\begin{itemize} +\item {} +DeviceMode.UltraSonic.DistCM \emph{{[}Default{]}} + +\item {} +DeviceMode.UltraSonic.DistIn + +\item {} +DeviceMode.UltraSonic.Listen + +\end{itemize} + +\end{description} + +\item {} \begin{description} +\item[{Color-Sensor:}] \leavevmode\begin{itemize} +\item {} +DeviceMode.Color.Reflect \emph{{[}Default{]}} + +\item {} +DeviceMode.Color.Ambient + +\item {} +DeviceMode.Color.Col + +\end{itemize} + +\end{description} + +\item {} \begin{description} +\item[{Gyro-Sensor:}] \leavevmode\begin{itemize} +\item {} +DeviceMode.Gyro.Angular \emph{{[}Default{]}} + +\item {} +DeviceMode.Gyro.Rate + +\end{itemize} + +\end{description} + +\item {} \begin{description} +\item[{Infrared-Sensor:}] \leavevmode\begin{itemize} +\item {} +DeviceMode.InfraRed.Prox \emph{{[}Default{]}} + +\item {} +DeviceMode.InfraRed.Seek + +\item {} +DeviceMode.InfraRed.Remote + +\end{itemize} + +\end{description} + +\item {} \begin{description} +\item[{NXTColor-Sensor:}] \leavevmode\begin{itemize} +\item {} +DeviceMode.NXTColor.Reflect \emph{{[}Default{]}} + +\item {} +DeviceMode.NXTColor.Ambient + +\item {} +DeviceMode.NXTColor.Color + +\item {} +DeviceMode.NXTColor.Green + +\item {} +DeviceMode.NXTColor.Blue + +\item {} +DeviceMode.NXTColor.Raw + +\end{itemize} + +\end{description} + +\item {} \begin{description} +\item[{NXTLight-Sensor:}] \leavevmode\begin{itemize} +\item {} +DeviceMode.NXTLight.Reflect \emph{{[}Default{]}} + +\item {} +DeviceMode.NXTLight.Ambient + +\end{itemize} + +\end{description} + +\item {} \begin{description} +\item[{NXTSound-Sensor:}] \leavevmode\begin{itemize} +\item {} +DeviceMode.NXTSound.DB \emph{{[}Default{]}} + +\item {} +DeviceMode.NXTSound.DBA + +\end{itemize} + +\end{description} + +\item {} \begin{description} +\item[{NXTTemperature-Sensor}] \leavevmode\begin{itemize} +\item {} +DeviceMode.NXTTemperature.C \emph{{[}Default{]}} + +\item {} +DeviceMode.NXTTemperature.F + +\end{itemize} + +\end{description} + +\item {} \begin{description} +\item[{NXTTouch-Sensor:}] \leavevmode\begin{itemize} +\item {} +DeviceMode.NXTTouch.Pushed \emph{{[}Default{]}} + +\item {} +DeviceMode.NXTTouch.Bumps + +\end{itemize} + +\end{description} + +\item {} \begin{description} +\item[{NXTUltraSonic-Sensor:}] \leavevmode\begin{itemize} +\item {} +DeviceMode.NXTUltraSonic.CM \emph{{[}Default{]}} + +\item {} +DeviceMode.NXTUltraSonic.IN + +\end{itemize} + +\end{description} + +\item {} \begin{description} +\item[{HTAccelerometer-Sensor:}] \leavevmode\begin{itemize} +\item {} +DeviceMode.HTAccelerometer.Acceleration \emph{{[}Default{]}} + +\item {} +DeviceMode.HTAccelerometer.AccelerationAllAxes + +\end{itemize} + +\end{description} + +\item {} \begin{description} +\item[{HTCompass-Sensor:}] \leavevmode\begin{itemize} +\item {} +DeviceMode.HTCompass.Degrees \emph{{[}Default{]}} + +\end{itemize} + +\end{description} + +\item {} \begin{description} +\item[{HTColor-Sensor:}] \leavevmode\begin{itemize} +\item {} +DeviceMode.HTColor.Col \emph{{[}Default{]}} + +\item {} +DeviceMode.HTColor.Red + +\item {} +DeviceMode.HTColor.Green + +\item {} +DeviceMode.HTColor.Blue + +\item {} +DeviceMode.HTColor.White + +\item {} +DeviceMode.HTColor.Raw + +\item {} +DeviceMode.HTColor.Nr, + +\item {} +DeviceMode.HTColor.All + +\end{itemize} + +\end{description} + +\end{itemize} + +\end{fulllineitems} + +\index{debug (source.Sensor attribute)} + +\begin{fulllineitems} +\phantomsection\label{Sensor:source.Sensor.debug}\pysigline{\sphinxbfcode{debug}} +\emph{bool} -- Debug turned on or off. In debug mode, everytime a command is passed to +the sublayer (`communication layer'), there is feedback in the console about what +command has been called. \emph{{[}WRITABLE{]}} + +\end{fulllineitems} + +\index{value (source.Sensor attribute)} + +\begin{fulllineitems} +\phantomsection\label{Sensor:source.Sensor.value}\pysigline{\sphinxbfcode{value}} +\emph{numeric} -- Value read from hysical sensor. What the value represents depends on +{\hyperref[Sensor:source.Sensor.mode]{\sphinxcrossref{\sphinxcode{mode}}}}. \emph{{[}READ-ONLY{]}} + +\end{fulllineitems} + +\index{type (source.Sensor attribute)} + +\begin{fulllineitems} +\phantomsection\label{Sensor:source.Sensor.type}\pysigline{\sphinxbfcode{type}} +\emph{DeviceType} -- Type of physical sensor connected to the port. Possible types are: {[}READ-ONLY{]} +\begin{itemize} +\item {} +DeviceType.NXTTouch + +\item {} +DeviceType.NXTLight + +\item {} +DeviceType.NXTSound + +\item {} +DeviceType.NXTColor + +\item {} +DeviceType.NXTUltraSonic + +\item {} +DeviceType.NXTTemperature + +\item {} +DeviceType.LargeMotor + +\item {} +DeviceType.MediumMotor + +\item {} +DeviceType.Touch + +\item {} +DeviceType.Color + +\item {} +DeviceType.UltraSonic + +\item {} +DeviceType.Gyro + +\item {} +DeviceType.InfraRed + +\item {} +DeviceType.HTColor + +\item {} +DeviceType.HTCompass + +\item {} +DeviceType.HTAccelerometer + +\item {} +DeviceType.Unknown + +\item {} +DeviceType.None + +\item {} +DeviceType.Error + +\end{itemize} + +\end{fulllineitems} + +\index{reset() (source.Sensor method)} + +\begin{fulllineitems} +\phantomsection\label{Sensor:source.Sensor.reset}\pysiglinewithargsret{\sphinxbfcode{reset}}{\emph{sensor}}{} +Resets sensor value. +\paragraph{Notes} +\begin{itemize} +\item {} +This clears ALL the sensors right now, no other Op-Code available... :( + +\end{itemize} + +\end{fulllineitems} + +\index{setProperties() (source.Sensor method)} + +\begin{fulllineitems} +\phantomsection\label{Sensor:source.Sensor.setProperties}\pysiglinewithargsret{\sphinxbfcode{setProperties}}{\emph{sensor}, \emph{varargin}}{} +Sets multiple Sensor properties at once using MATLAB's inputParser. +\begin{quote}\begin{description} +\item[{Parameters}] \leavevmode\begin{itemize} +\item {} +\textbf{\texttt{debug}} (\emph{\texttt{bool}}) -- \emph{{[}OPTIONAL{]}} + +\item {} +\textbf{\texttt{mode}} (\emph{\texttt{DeviceMode.\{Type\}}}) -- \emph{{[}OPTIONAL{]}} + +\end{itemize} + +\end{description}\end{quote} +\paragraph{Example} + +b = EV3(); \% +b.connect(`bt', `serPort', `/dev/rfcomm0'); \% +b.sensor1.setProperties(`debug', `on', `mode', DeviceMode.Color.Ambient); \% +\% Instead of: b.sensor1.debug = `on'; +\% b.sensor1.mode = DeviceMode.Color.Ambient; + +\end{fulllineitems} + + +\end{fulllineitems} + + +Advanced +\phantomsection\label{CommandLayer:module-source}\index{source (module)} + +\section{CommandLayer} +\label{CommandLayer:commandlayer}\label{CommandLayer::doc} + +\subsection{Command} +\label{CommandLayer:command} + +\subsection{CommunicationInterface} +\label{CommandLayer:communicationinterface}\phantomsection\label{CommunicationLayer:module-source}\index{source (module)} + +\section{CommunicationLayer} +\label{CommunicationLayer:communicationlayer}\label{CommunicationLayer::doc} + +\subsection{USB} +\label{CommunicationLayer:usb} + +\subsection{Bluetooth} +\label{CommunicationLayer:bluetooth} + + +\renewcommand{\indexname}{Index} +\printindex +\end{document} diff --git a/docs/_build/latex/MindstormsEV3Toolbox.toc b/docs/_build/latex/MindstormsEV3Toolbox.toc new file mode 100644 index 0000000000000000000000000000000000000000..9f33bc3bdc23cc9156dc2cb004f383e5705337fa --- /dev/null +++ b/docs/_build/latex/MindstormsEV3Toolbox.toc @@ -0,0 +1,39 @@ +\select@language {english} +\contentsline {chapter}{\numberline {1}Contents}{3}{chapter.1} +\contentsline {section}{\numberline {1.1}General}{3}{section.1.1} +\contentsline {subsection}{\numberline {1.1.1}Installation}{3}{subsection.1.1.1} +\contentsline {subsection}{\numberline {1.1.2}Contribution}{3}{subsection.1.1.2} +\contentsline {subsection}{\numberline {1.1.3}Licenses}{3}{subsection.1.1.3} +\contentsline {section}{\numberline {1.2}Examples}{3}{section.1.2} +\contentsline {section}{\numberline {1.3}EV3}{3}{section.1.3} +\contentsline {paragraph}{Notes}{4}{paragraph*.5} +\contentsline {paragraph}{Example}{4}{paragraph*.18} +\contentsline {paragraph}{Notes}{5}{paragraph*.20} +\contentsline {paragraph}{Example}{5}{paragraph*.21} +\contentsline {paragraph}{Example}{5}{paragraph*.23} +\contentsline {paragraph}{Notes}{5}{paragraph*.25} +\contentsline {paragraph}{Example}{5}{paragraph*.26} +\contentsline {paragraph}{Example}{6}{paragraph*.28} +\contentsline {paragraph}{Example}{6}{paragraph*.30} +\contentsline {paragraph}{Example}{6}{paragraph*.33} +\contentsline {section}{\numberline {1.4}Motor}{6}{section.1.4} +\contentsline {paragraph}{Notes}{7}{paragraph*.37} +\contentsline {paragraph}{Notes}{8}{paragraph*.51} +\contentsline {paragraph}{Notes}{8}{paragraph*.54} +\contentsline {paragraph}{Example}{9}{paragraph*.56} +\contentsline {paragraph}{Notes}{9}{paragraph*.59} +\contentsline {paragraph}{Notes}{9}{paragraph*.61} +\contentsline {paragraph}{Example}{9}{paragraph*.62} +\contentsline {paragraph}{Notes}{10}{paragraph*.64} +\contentsline {paragraph}{Notes}{10}{paragraph*.66} +\contentsline {section}{\numberline {1.5}Sensor}{10}{section.1.5} +\contentsline {paragraph}{Notes}{10}{paragraph*.69} +\contentsline {paragraph}{Notes}{13}{paragraph*.75} +\contentsline {paragraph}{Example}{13}{paragraph*.77} +\contentsline {section}{\numberline {1.6}CommandLayer}{13}{section.1.6} +\contentsline {subsection}{\numberline {1.6.1}Command}{13}{subsection.1.6.1} +\contentsline {subsection}{\numberline {1.6.2}CommunicationInterface}{13}{subsection.1.6.2} +\contentsline {section}{\numberline {1.7}CommunicationLayer}{13}{section.1.7} +\contentsline {subsection}{\numberline {1.7.1}USB}{13}{subsection.1.7.1} +\contentsline {subsection}{\numberline {1.7.2}Bluetooth}{13}{subsection.1.7.2} +\contentsline {chapter}{Index}{15}{section*.80} diff --git a/docs/_build/latex/fncychap.sty b/docs/_build/latex/fncychap.sty new file mode 100644 index 0000000000000000000000000000000000000000..9a56c04ed4223ce77e463eea87755151f5d4864c --- /dev/null +++ b/docs/_build/latex/fncychap.sty @@ -0,0 +1,683 @@ +%%% Copyright Ulf A. Lindgren +%%% +%%% Note Premission is granted to modify this file under +%%% the condition that it is saved using another +%%% file and package name. +%%% +%%% Revision 1.1 (1997) +%%% +%%% Jan. 8th Modified package name base date option +%%% Jan. 22th Modified FmN and FmTi for error in book.cls +%%% \MakeUppercase{#}->{\MakeUppercase#} +%%% Apr. 6th Modified Lenny option to prevent undesired +%%% skip of line. +%%% Nov. 8th Fixed \@chapapp for AMS +%%% +%%% Revision 1.2 (1998) +%%% +%%% Feb. 11th Fixed appendix problem related to Bjarne +%%% Aug. 11th Fixed problem related to 11pt and 12pt +%%% suggested by Tomas Lundberg. THANKS! +%%% +%%% Revision 1.3 (2004) +%%% Sep. 20th problem with frontmatter, mainmatter and +%%% backmatter, pointed out by Lapo Mori +%%% +%%% Revision 1.31 (2004) +%%% Sep. 21th problem with the Rejne definition streched text +%%% caused ugly gaps in the vrule aligned with the title +%%% text. Kindly pointed out to me by Hendri Adriaens +%%% +%%% Revision 1.32 (2005) +%%% Jun. 23th compatibility problem with the KOMA class 'scrbook.cls' +%%% a remedy is a redefinition of '\@schapter' in +%%% line with that used in KOMA. The problem was pointed +%%% out to me by Mikkel Holm Olsen +%%% +%%% Revision 1.33 (2005) +%%% Aug. 9th misspelled ``TWELV'' corrected, the error was pointed +%%% out to me by George Pearson +%%% +%%% Revision 1.34 (2007) +%%% Added an alternative to Lenny provided by Peter +%%% Osborne (2005-11-28) +%%% Corrected front, main and back matter, based on input +%%% from Bas van Gils (2006-04-24) +%%% Jul. 30th Added Bjornstrup option provided by Jean-Marc +%%% Francois (2007-01-05). +%%% Reverted to \MakeUppercase{#} see rev 1.1, solved +%%% problem with MakeUppercase and MakeLowercase pointed +%%% out by Marco Feuerstein (2007-06-06) + + +%%% Last modified Jul. 2007 + +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesPackage{fncychap} + [2007/07/30 v1.34 + LaTeX package (Revised chapters)] + +%%%% For conditional inclusion of color +\newif\ifusecolor +\usecolorfalse + + + +%%%% DEFINITION OF Chapapp variables +\newcommand{\CNV}{\huge\bfseries} +\newcommand{\ChNameVar}[1]{\renewcommand{\CNV}{#1}} + + +%%%% DEFINITION OF TheChapter variables +\newcommand{\CNoV}{\huge\bfseries} +\newcommand{\ChNumVar}[1]{\renewcommand{\CNoV}{#1}} + +\newif\ifUCN +\UCNfalse +\newif\ifLCN +\LCNfalse +\def\ChNameLowerCase{\LCNtrue\UCNfalse} +\def\ChNameUpperCase{\UCNtrue\LCNfalse} +\def\ChNameAsIs{\UCNfalse\LCNfalse} + +%%%%% Fix for AMSBook 971008 + +\@ifundefined{@chapapp}{\let\@chapapp\chaptername}{} + + +%%%%% Fix for Bjarne and appendix 980211 + +\newif\ifinapp +\inappfalse +\renewcommand\appendix{\par + \setcounter{chapter}{0}% + \setcounter{section}{0}% + \inapptrue% + \renewcommand\@chapapp{\appendixname}% + \renewcommand\thechapter{\@Alph\c@chapter}} + +%%%%% Fix for frontmatter, mainmatter, and backmatter 040920 + +\@ifundefined{@mainmatter}{\newif\if@mainmatter \@mainmattertrue}{} + +%%%%% + + + +\newcommand{\FmN}[1]{% +\ifUCN + {\MakeUppercase{#1}}\LCNfalse +\else + \ifLCN + {\MakeLowercase{#1}}\UCNfalse + \else #1 + \fi +\fi} + + +%%%% DEFINITION OF Title variables +\newcommand{\CTV}{\Huge\bfseries} +\newcommand{\ChTitleVar}[1]{\renewcommand{\CTV}{#1}} + +%%%% DEFINITION OF the basic rule width +\newlength{\RW} +\setlength{\RW}{1pt} +\newcommand{\ChRuleWidth}[1]{\setlength{\RW}{#1}} + +\newif\ifUCT +\UCTfalse +\newif\ifLCT +\LCTfalse +\def\ChTitleLowerCase{\LCTtrue\UCTfalse} +\def\ChTitleUpperCase{\UCTtrue\LCTfalse} +\def\ChTitleAsIs{\UCTfalse\LCTfalse} +\newcommand{\FmTi}[1]{% +\ifUCT + {\MakeUppercase{#1}}\LCTfalse +\else + \ifLCT + {\MakeLowercase{#1}}\UCTfalse + \else {#1} + \fi +\fi} + + + +\newlength{\mylen} +\newlength{\myhi} +\newlength{\px} +\newlength{\py} +\newlength{\pyy} +\newlength{\pxx} + + +\def\mghrulefill#1{\leavevmode\leaders\hrule\@height #1\hfill\kern\z@} + +\newcommand{\DOCH}{% + \CNV\FmN{\@chapapp}\space \CNoV\thechapter + \par\nobreak + \vskip 20\p@ + } +\newcommand{\DOTI}[1]{% + \CTV\FmTi{#1}\par\nobreak + \vskip 40\p@ + } +\newcommand{\DOTIS}[1]{% + \CTV\FmTi{#1}\par\nobreak + \vskip 40\p@ + } + +%%%%%% SONNY DEF + +\DeclareOption{Sonny}{% + \ChNameVar{\Large\sf} + \ChNumVar{\Huge} + \ChTitleVar{\Large\sf} + \ChRuleWidth{0.5pt} + \ChNameUpperCase + \renewcommand{\DOCH}{% + \raggedleft + \CNV\FmN{\@chapapp}\space \CNoV\thechapter + \par\nobreak + \vskip 40\p@} + \renewcommand{\DOTI}[1]{% + \CTV\raggedleft\mghrulefill{\RW}\par\nobreak + \vskip 5\p@ + \CTV\FmTi{#1}\par\nobreak + \mghrulefill{\RW}\par\nobreak + \vskip 40\p@} + \renewcommand{\DOTIS}[1]{% + \CTV\raggedleft\mghrulefill{\RW}\par\nobreak + \vskip 5\p@ + \CTV\FmTi{#1}\par\nobreak + \mghrulefill{\RW}\par\nobreak + \vskip 40\p@} +} + +%%%%%% LENNY DEF + +\DeclareOption{Lenny}{% + + \ChNameVar{\fontsize{14}{16}\usefont{OT1}{phv}{m}{n}\selectfont} + \ChNumVar{\fontsize{60}{62}\usefont{OT1}{ptm}{m}{n}\selectfont} + \ChTitleVar{\Huge\bfseries\rm} + \ChRuleWidth{1pt} + \renewcommand{\DOCH}{% + \settowidth{\px}{\CNV\FmN{\@chapapp}} + \addtolength{\px}{2pt} + \settoheight{\py}{\CNV\FmN{\@chapapp}} + \addtolength{\py}{1pt} + + \settowidth{\mylen}{\CNV\FmN{\@chapapp}\space\CNoV\thechapter} + \addtolength{\mylen}{1pt} + \settowidth{\pxx}{\CNoV\thechapter} + \addtolength{\pxx}{-1pt} + + \settoheight{\pyy}{\CNoV\thechapter} + \addtolength{\pyy}{-2pt} + \setlength{\myhi}{\pyy} + \addtolength{\myhi}{-1\py} + \par + \parbox[b]{\textwidth}{% + \rule[\py]{\RW}{\myhi}% + \hskip -\RW% + \rule[\pyy]{\px}{\RW}% + \hskip -\px% + \raggedright% + \CNV\FmN{\@chapapp}\space\CNoV\thechapter% + \hskip1pt% + \mghrulefill{\RW}% + \rule{\RW}{\pyy}\par\nobreak% + \vskip -\baselineskip% + \vskip -\pyy% + \hskip \mylen% + \mghrulefill{\RW}\par\nobreak% + \vskip \pyy}% + \vskip 20\p@} + + + \renewcommand{\DOTI}[1]{% + \raggedright + \CTV\FmTi{#1}\par\nobreak + \vskip 40\p@} + + \renewcommand{\DOTIS}[1]{% + \raggedright + \CTV\FmTi{#1}\par\nobreak + \vskip 40\p@} + } + +%%%%%% Peter Osbornes' version of LENNY DEF + +\DeclareOption{PetersLenny}{% + +% five new lengths +\newlength{\bl} % bottom left : orig \space +\setlength{\bl}{6pt} +\newcommand{\BL}[1]{\setlength{\bl}{#1}} +\newlength{\br} % bottom right : orig 1pt +\setlength{\br}{1pt} +\newcommand{\BR}[1]{\setlength{\br}{#1}} +\newlength{\tl} % top left : orig 2pt +\setlength{\tl}{2pt} +\newcommand{\TL}[1]{\setlength{\tl}{#1}} +\newlength{\trr} % top right :orig 1pt +\setlength{\trr}{1pt} +\newcommand{\TR}[1]{\setlength{\trr}{#1}} +\newlength{\blrule} % top right :orig 1pt +\setlength{\trr}{0pt} +\newcommand{\BLrule}[1]{\setlength{\blrule}{#1}} + + + \ChNameVar{\fontsize{14}{16}\usefont{OT1}{phv}{m}{n}\selectfont} + \ChNumVar{\fontsize{60}{62}\usefont{OT1}{ptm}{m}{n}\selectfont} + \ChTitleVar{\Huge\bfseries\rm} + \ChRuleWidth{1pt} +\renewcommand{\DOCH}{% + + +%%%%%%% tweaks for 1--9 and A--Z +\ifcase\c@chapter\relax% +\or\BL{-3pt}\TL{-4pt}\BR{0pt}\TR{-6pt}%1 +\or\BL{0pt}\TL{-4pt}\BR{2pt}\TR{-4pt}%2 +\or\BL{0pt}\TL{-4pt}\BR{2pt}\TR{-4pt}%3 +\or\BL{0pt}\TL{5pt}\BR{2pt}\TR{-4pt}%4 +\or\BL{0pt}\TL{3pt}\BR{2pt}\TR{-4pt}%5 +\or\BL{-1pt}\TL{0pt}\BR{2pt}\TR{-2pt}%6 +\or\BL{0pt}\TL{-3pt}\BR{2pt}\TR{-2pt}%7 +\or\BL{0pt}\TL{-3pt}\BR{2pt}\TR{-2pt}%8 +\or\BL{0pt}\TL{-3pt}\BR{-4pt}\TR{-2pt}%9 +\or\BL{-3pt}\TL{-3pt}\BR{2pt}\TR{-7pt}%10 +\or\BL{-6pt}\TL{-6pt}\BR{0pt}\TR{-9pt}%11 +\or\BL{-6pt}\TL{-6pt}\BR{2pt}\TR{-7pt}%12 +\or\BL{-5pt}\TL{-5pt}\BR{0pt}\TR{-9pt}%13 +\or\BL{-6pt}\TL{-6pt}\BR{0pt}\TR{-9pt}%14 +\or\BL{-3pt}\TL{-3pt}\BR{3pt}\TR{-6pt}%15 +\or\BL{-3pt}\TL{-3pt}\BR{3pt}\TR{-6pt}%16 +\or\BL{-5pt}\TL{-3pt}\BR{-8pt}\TR{-6pt}%17 +\or\BL{-5pt}\TL{-5pt}\BR{0pt}\TR{-9pt}%18 +\or\BL{-3pt}\TL{-3pt}\BR{-6pt}\TR{-9pt}%19 +\or\BL{0pt}\TL{0pt}\BR{0pt}\TR{-5pt}%20 +\fi + +\ifinapp\ifcase\c@chapter\relax% +\or\BL{0pt}\TL{14pt}\BR{5pt}\TR{-19pt}%A +\or\BL{0pt}\TL{-5pt}\BR{-3pt}\TR{-8pt}%B +\or\BL{-3pt}\TL{-2pt}\BR{1pt}\TR{-6pt}\BLrule{0pt}%C +\or\BL{0pt}\TL{-5pt}\BR{-3pt}\TR{-8pt}\BLrule{0pt}%D +\or\BL{0pt}\TL{-5pt}\BR{2pt}\TR{-3pt}%E +\or\BL{0pt}\TL{-5pt}\BR{-10pt}\TR{-1pt}%F +\or\BL{-3pt}\TL{0pt}\BR{0pt}\TR{-7pt}%G +\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}%H +\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}%I +\or\BL{2pt}\TL{0pt}\BR{-3pt}\TR{1pt}%J +\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}%K +\or\BL{0pt}\TL{-5pt}\BR{2pt}\TR{-19pt}%L +\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}%M +\or\BL{0pt}\TL{-5pt}\BR{-2pt}\TR{-1pt}%N +\or\BL{-3pt}\TL{-2pt}\BR{-3pt}\TR{-11pt}%O +\or\BL{0pt}\TL{-5pt}\BR{-9pt}\TR{-3pt}%P +\or\BL{-3pt}\TL{-2pt}\BR{-3pt}\TR{-11pt}%Q +\or\BL{0pt}\TL{-5pt}\BR{4pt}\TR{-8pt}%R +\or\BL{-2pt}\TL{-2pt}\BR{-2pt}\TR{-7pt}%S +\or\BL{-3pt}\TL{0pt}\BR{-5pt}\TR{4pt}\BLrule{8pt}%T +\or\BL{-7pt}\TL{-11pt}\BR{-5pt}\TR{-7pt}\BLrule{0pt}%U +\or\BL{-14pt}\TL{-5pt}\BR{-14pt}\TR{-1pt}\BLrule{14pt}%V +\or\BL{-10pt}\TL{-9pt}\BR{-13pt}\TR{-3pt}\BLrule{7pt}%W +\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}\BLrule{0pt}%X +\or\BL{-6pt}\TL{-4pt}\BR{-7pt}\TR{1pt}\BLrule{7pt}%Y +\or\BL{0pt}\TL{-5pt}\BR{3pt}\TR{-1pt}\BLrule{0pt}%Z +\fi\fi +%%%%%%% + \settowidth{\px}{\CNV\FmN{\@chapapp}} + \addtolength{\px}{\tl} %MOD change 2pt to \tl + \settoheight{\py}{\CNV\FmN{\@chapapp}} + \addtolength{\py}{1pt} + + \settowidth{\mylen}{\CNV\FmN{\@chapapp}\space\CNoV\thechapter} + \addtolength{\mylen}{\trr}% MOD change 1pt to \tr + \settowidth{\pxx}{\CNoV\thechapter} + \addtolength{\pxx}{-1pt} + + \settoheight{\pyy}{\CNoV\thechapter} + \addtolength{\pyy}{-2pt} + \setlength{\myhi}{\pyy} + \addtolength{\myhi}{-1\py} + \par + \parbox[b]{\textwidth}{% + \rule[\py]{\RW}{\myhi}% + \hskip -\RW% + \rule[\pyy]{\px}{\RW}% + \hskip -\px% + \raggedright% + \CNV\FmN{\@chapapp}\rule{\blrule}{\RW}\hskip\bl\CNoV\thechapter%MOD +% \CNV\FmN{\@chapapp}\space\CNoV\thechapter %ORIGINAL + \hskip\br% %MOD 1pt to \br + \mghrulefill{\RW}% + \rule{\RW}{\pyy}\par\nobreak% + \vskip -\baselineskip% + \vskip -\pyy% + \hskip \mylen% + \mghrulefill{\RW}\par\nobreak% + \vskip \pyy}% + \vskip 20\p@} + + + \renewcommand{\DOTI}[1]{% + \raggedright + \CTV\FmTi{#1}\par\nobreak + \vskip 40\p@} + + \renewcommand{\DOTIS}[1]{% + \raggedright + \CTV\FmTi{#1}\par\nobreak + \vskip 40\p@} + } + + +% + + +%%%%%% BJORNSTRUP DEF + +\DeclareOption{Bjornstrup}{% + \usecolortrue + % pzc (Zapf Chancelery) is nice. ppl (Palatino) is cool too. + \ChNumVar{\fontsize{76}{80}\usefont{OT1}{pzc}{m}{n}\selectfont} + \ChTitleVar{\raggedleft\Large\sffamily\bfseries} + + \setlength{\myhi}{10pt} % Space between grey box border and text + \setlength{\mylen}{\textwidth} + \addtolength{\mylen}{-2\myhi} + \renewcommand{\DOCH}{% + \settowidth{\py}{\CNoV\thechapter} + \addtolength{\py}{-10pt} % Amount of space by which the +% % number is shifted right + \fboxsep=0pt% + \colorbox[gray]{.85}{\rule{0pt}{40pt}\parbox[b]{\textwidth}{\hfill}}% + \kern-\py\raise20pt% + \hbox{\color[gray]{.5}\CNoV\thechapter}\\% + } + + \renewcommand{\DOTI}[1]{% + \nointerlineskip\raggedright% + \fboxsep=\myhi% + \vskip-1ex% + \colorbox[gray]{.85}{\parbox[t]{\mylen}{\CTV\FmTi{#1}}}\par\nobreak% + \vskip 40\p@% + } + + \renewcommand{\DOTIS}[1]{% + \fboxsep=0pt + \colorbox[gray]{.85}{\rule{0pt}{40pt}\parbox[b]{\textwidth}{\hfill}}\\% + \nointerlineskip\raggedright% + \fboxsep=\myhi% + \colorbox[gray]{.85}{\parbox[t]{\mylen}{\CTV\FmTi{#1}}}\par\nobreak% + \vskip 40\p@% + } +} + + +%%%%%%% GLENN DEF + + +\DeclareOption{Glenn}{% + \ChNameVar{\bfseries\Large\sf} + \ChNumVar{\Huge} + \ChTitleVar{\bfseries\Large\rm} + \ChRuleWidth{1pt} + \ChNameUpperCase + \ChTitleUpperCase + \renewcommand{\DOCH}{% + \settoheight{\myhi}{\CTV\FmTi{Test}} + \setlength{\py}{\baselineskip} + \addtolength{\py}{\RW} + \addtolength{\py}{\myhi} + \setlength{\pyy}{\py} + \addtolength{\pyy}{-1\RW} + + \raggedright + \CNV\FmN{\@chapapp}\space\CNoV\thechapter + \hskip 3pt\mghrulefill{\RW}\rule[-1\pyy]{2\RW}{\py}\par\nobreak} + + \renewcommand{\DOTI}[1]{% + \addtolength{\pyy}{-4pt} + \settoheight{\myhi}{\CTV\FmTi{#1}} + \addtolength{\myhi}{\py} + \addtolength{\myhi}{-1\RW} + \vskip -1\pyy + \rule{2\RW}{\myhi}\mghrulefill{\RW}\hskip 2pt + \raggedleft\CTV\FmTi{#1}\par\nobreak + \vskip 80\p@} + +\newlength{\backskip} + \renewcommand{\DOTIS}[1]{% +% \setlength{\py}{10pt} +% \setlength{\pyy}{\py} +% \addtolength{\pyy}{\RW} +% \setlength{\myhi}{\baselineskip} +% \addtolength{\myhi}{\pyy} +% \mghrulefill{\RW}\rule[-1\py]{2\RW}{\pyy}\par\nobreak +% \addtolength{}{} +%\vskip -1\baselineskip +% \rule{2\RW}{\myhi}\mghrulefill{\RW}\hskip 2pt +% \raggedleft\CTV\FmTi{#1}\par\nobreak +% \vskip 60\p@} +%% Fix suggested by Tomas Lundberg + \setlength{\py}{25pt} % eller vad man vill + \setlength{\pyy}{\py} + \setlength{\backskip}{\py} + \addtolength{\backskip}{2pt} + \addtolength{\pyy}{\RW} + \setlength{\myhi}{\baselineskip} + \addtolength{\myhi}{\pyy} + \mghrulefill{\RW}\rule[-1\py]{2\RW}{\pyy}\par\nobreak + \vskip -1\backskip + \rule{2\RW}{\myhi}\mghrulefill{\RW}\hskip 3pt % + \raggedleft\CTV\FmTi{#1}\par\nobreak + \vskip 40\p@} + } + +%%%%%%% CONNY DEF + +\DeclareOption{Conny}{% + \ChNameUpperCase + \ChTitleUpperCase + \ChNameVar{\centering\Huge\rm\bfseries} + \ChNumVar{\Huge} + \ChTitleVar{\centering\Huge\rm} + \ChRuleWidth{2pt} + + \renewcommand{\DOCH}{% + \mghrulefill{3\RW}\par\nobreak + \vskip -0.5\baselineskip + \mghrulefill{\RW}\par\nobreak + \CNV\FmN{\@chapapp}\space \CNoV\thechapter + \par\nobreak + \vskip -0.5\baselineskip + } + \renewcommand{\DOTI}[1]{% + \mghrulefill{\RW}\par\nobreak + \CTV\FmTi{#1}\par\nobreak + \vskip 60\p@ + } + \renewcommand{\DOTIS}[1]{% + \mghrulefill{\RW}\par\nobreak + \CTV\FmTi{#1}\par\nobreak + \vskip 60\p@ + } + } + +%%%%%%% REJNE DEF + +\DeclareOption{Rejne}{% + + \ChNameUpperCase + \ChTitleUpperCase + \ChNameVar{\centering\Large\rm} + \ChNumVar{\Huge} + \ChTitleVar{\centering\Huge\rm} + \ChRuleWidth{1pt} + \renewcommand{\DOCH}{% + \settoheight{\py}{\CNoV\thechapter} + \parskip=0pt plus 1pt % Set parskip to default, just in case v1.31 + \addtolength{\py}{-1pt} + \CNV\FmN{\@chapapp}\par\nobreak + \vskip 20\p@ + \setlength{\myhi}{2\baselineskip} + \setlength{\px}{\myhi} + \addtolength{\px}{-1\RW} + \rule[-1\px]{\RW}{\myhi}\mghrulefill{\RW}\hskip + 10pt\raisebox{-0.5\py}{\CNoV\thechapter}\hskip 10pt\mghrulefill{\RW}\rule[-1\px]{\RW}{\myhi}\par\nobreak + \vskip -3\p@% Added -2pt vskip to correct for streched text v1.31 + } + \renewcommand{\DOTI}[1]{% + \setlength{\mylen}{\textwidth} + \parskip=0pt plus 1pt % Set parskip to default, just in case v1.31 + \addtolength{\mylen}{-2\RW} + {\vrule width\RW}\parbox{\mylen}{\CTV\FmTi{#1}}{\vrule width\RW}\par\nobreak% + \vskip -3pt\rule{\RW}{2\baselineskip}\mghrulefill{\RW}\rule{\RW}{2\baselineskip}% + \vskip 60\p@% Added -2pt in vskip to correct for streched text v1.31 + } + \renewcommand{\DOTIS}[1]{% + \setlength{\py}{\fboxrule} + \setlength{\fboxrule}{\RW} + \setlength{\mylen}{\textwidth} + \addtolength{\mylen}{-2\RW} + \fbox{\parbox{\mylen}{\vskip 2\baselineskip\CTV\FmTi{#1}\par\nobreak\vskip \baselineskip}} + \setlength{\fboxrule}{\py} + \vskip 60\p@ + } + } + + +%%%%%%% BJARNE DEF + +\DeclareOption{Bjarne}{% + \ChNameUpperCase + \ChTitleUpperCase + \ChNameVar{\raggedleft\normalsize\rm} + \ChNumVar{\raggedleft \bfseries\Large} + \ChTitleVar{\raggedleft \Large\rm} + \ChRuleWidth{1pt} + + +%% Note thechapter -> c@chapter fix appendix bug +%% Fixed misspelled 12 + + \newcounter{AlphaCnt} + \newcounter{AlphaDecCnt} + \newcommand{\AlphaNo}{% + \ifcase\number\theAlphaCnt + \ifnum\c@chapter=0 + ZERO\else{}\fi + \or ONE\or TWO\or THREE\or FOUR\or FIVE + \or SIX\or SEVEN\or EIGHT\or NINE\or TEN + \or ELEVEN\or TWELVE\or THIRTEEN\or FOURTEEN\or FIFTEEN + \or SIXTEEN\or SEVENTEEN\or EIGHTEEN\or NINETEEN\fi +} + + \newcommand{\AlphaDecNo}{% + \setcounter{AlphaDecCnt}{0} + \@whilenum\number\theAlphaCnt>0\do + {\addtocounter{AlphaCnt}{-10} + \addtocounter{AlphaDecCnt}{1}} + \ifnum\number\theAlphaCnt=0 + \else + \addtocounter{AlphaDecCnt}{-1} + \addtocounter{AlphaCnt}{10} + \fi + + + \ifcase\number\theAlphaDecCnt\or TEN\or TWENTY\or THIRTY\or + FORTY\or FIFTY\or SIXTY\or SEVENTY\or EIGHTY\or NINETY\fi + } + \newcommand{\TheAlphaChapter}{% + + \ifinapp + \thechapter + \else + \setcounter{AlphaCnt}{\c@chapter} + \ifnum\c@chapter<20 + \AlphaNo + \else + \AlphaDecNo\AlphaNo + \fi + \fi + } + \renewcommand{\DOCH}{% + \mghrulefill{\RW}\par\nobreak + \CNV\FmN{\@chapapp}\par\nobreak + \CNoV\TheAlphaChapter\par\nobreak + \vskip -1\baselineskip\vskip 5pt\mghrulefill{\RW}\par\nobreak + \vskip 20\p@ + } + \renewcommand{\DOTI}[1]{% + \CTV\FmTi{#1}\par\nobreak + \vskip 40\p@ + } + \renewcommand{\DOTIS}[1]{% + \CTV\FmTi{#1}\par\nobreak + \vskip 40\p@ + } +} + +\DeclareOption*{% + \PackageWarning{fancychapter}{unknown style option} + } + +\ProcessOptions* \relax + +\ifusecolor + \RequirePackage{color} +\fi +\def\@makechapterhead#1{% + \vspace*{50\p@}% + {\parindent \z@ \raggedright \normalfont + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter%%%%% Fix for frontmatter, mainmatter, and backmatter 040920 + \DOCH + \fi + \fi + \interlinepenalty\@M + \if@mainmatter%%%%% Fix for frontmatter, mainmatter, and backmatter 060424 + \DOTI{#1}% + \else% + \DOTIS{#1}% + \fi + }} + + +%%% Begin: To avoid problem with scrbook.cls (fncychap version 1.32) + +%%OUT: +%\def\@schapter#1{\if@twocolumn +% \@topnewpage[\@makeschapterhead{#1}]% +% \else +% \@makeschapterhead{#1}% +% \@afterheading +% \fi} + +%%IN: +\def\@schapter#1{% +\if@twocolumn% + \@makeschapterhead{#1}% +\else% + \@makeschapterhead{#1}% + \@afterheading% +\fi} + +%%% End: To avoid problem with scrbook.cls (fncychap version 1.32) + +\def\@makeschapterhead#1{% + \vspace*{50\p@}% + {\parindent \z@ \raggedright + \normalfont + \interlinepenalty\@M + \DOTIS{#1} + \vskip 40\p@ + }} + +\endinput + + diff --git a/docs/_build/latex/iftex.sty b/docs/_build/latex/iftex.sty new file mode 100644 index 0000000000000000000000000000000000000000..7651466448f43ee1a8b2ba4417fba3d81b0de4bc --- /dev/null +++ b/docs/_build/latex/iftex.sty @@ -0,0 +1,97 @@ +%% +%% This is file `iftex.sty', + +%% +%% __________________________________ +%% Copyright © 2010–2013 Persian TeX Group +%% +%% License information appended. +%% +%% +\csname iftexloaded\endcsname +\let\iftexloaded\endinput +\expandafter\ifx\csname ProvidesPackage\endcsname\relax\else + \ProvidesPackage{iftex} + [2013/04/04 v0.2 Provides if(tex) conditional for PDFTeX, XeTeX, and LuaTeX] +\fi +\def\RequirePDFTeX{% + \ifPDFTeX\else + \begingroup + \errorcontextlines=-1\relax + \newlinechar=10\relax + \errmessage{^^J + ********************************************^^J + * PDFTeX is required to compile this document.^^J + * Sorry!^^J + ********************************************}% + \endgroup + \fi} +\def\RequireXeTeX{% + \ifXeTeX\else + \begingroup + \errorcontextlines=-1\relax + \newlinechar=10\relax + \errmessage{^^J + ********************************************^^J + * XeTeX is required to compile this document.^^J + * Sorry!^^J + ********************************************}% + \endgroup + \fi} +\def\RequireLuaTeX{% + \ifLuaTeX\else + \begingroup + \errorcontextlines=-1\relax + \newlinechar=10\relax + \errmessage{^^J + ********************************************^^J + * LuaTeX is required to compile this document.^^J + * Sorry!^^J + ********************************************}% + \endgroup + \fi} +\expandafter\ifx\csname ifPDFTeX\endcsname\relax\else + \expandafter\endinput +\fi +\expandafter\ifx\csname ifXeTeX\endcsname\relax\else + \expandafter\endinput +\fi +\expandafter\ifx\csname ifLuaTeX\endcsname\relax\else + \expandafter\endinput +\fi +\newif\ifPDFTeX +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname pdfmatch\endcsname\relax + \PDFTeXfalse +\else + \PDFTeXtrue +\fi +\newif\ifXeTeX +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname XeTeXinterchartoks\endcsname\relax + \XeTeXfalse +\else + \XeTeXtrue +\fi +\newif\ifLuaTeX +\begingroup\expandafter\expandafter\expandafter\endgroup +\expandafter\ifx\csname directlua\endcsname\relax + \LuaTeXfalse +\else + \LuaTeXtrue +\fi +%% +%% Copyright © 2010–2013 by Persian TeX Group <persian-tex@tug.org> +%% +%% Distributable under the LaTeX Project Public License, +%% version 1.3c or higher (your choice). The latest version of +%% this license is at: http://www.latex-project.org/lppl.txt +%% +%% This work is "maintained" (as per LPPL maintenance status) +%% by Persian TeX Group. +%% +%% +%% +%% +%% +%% End of file `iftex.sty'. diff --git a/docs/_build/latex/needspace.sty b/docs/_build/latex/needspace.sty new file mode 100644 index 0000000000000000000000000000000000000000..113d87216ff484dffd6768003fc1536fd955f637 --- /dev/null +++ b/docs/_build/latex/needspace.sty @@ -0,0 +1,35 @@ + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{needspace}[2010/09/12 v1.3d reserve vertical space] + +\newcommand{\needspace}[1]{% + \begingroup + \setlength{\dimen@}{#1}% + \vskip\z@\@plus\dimen@ + \penalty -100\vskip\z@\@plus -\dimen@ + \vskip\dimen@ + \penalty 9999% + \vskip -\dimen@ + \vskip\z@skip % hide the previous |\vskip| from |\addvspace| + \endgroup +} + +\newcommand{\Needspace}{\@ifstar{\@sneedsp@}{\@needsp@}} + +\newcommand{\@sneedsp@}[1]{\par \penalty-100\begingroup + \setlength{\dimen@}{#1}% + \dimen@ii\pagegoal \advance\dimen@ii-\pagetotal + \ifdim \dimen@>\dimen@ii + \break + \fi\endgroup} + +\newcommand{\@needsp@}[1]{\par \penalty-100\begingroup + \setlength{\dimen@}{#1}% + \dimen@ii\pagegoal \advance\dimen@ii-\pagetotal + \ifdim \dimen@>\dimen@ii + \ifdim \dimen@ii>\z@ + \vfil + \fi + \break + \fi\endgroup} + diff --git a/docs/_build/latex/newfloat.sty b/docs/_build/latex/newfloat.sty new file mode 100644 index 0000000000000000000000000000000000000000..47ac5e568b08feef2a70a23d8c9ceded64ac42d1 --- /dev/null +++ b/docs/_build/latex/newfloat.sty @@ -0,0 +1,737 @@ +%% +%% This is file `newfloat.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% newfloat.dtx (with options: `package') +%% +%% Copyright (C) 1994-2016 Axel Sommerfeldt (axel.sommerfeldt@f-m.fm) +%% +%% http://sourceforge.net/projects/latex-caption/ +%% +%% -------------------------------------------------------------------------- +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This work has the LPPL maintenance status "maintained". +%% +%% This Current Maintainer of this work is Axel Sommerfeldt. +%% +%% This work consists of the files +%% CHANGELOG, README, SUMMARY, caption.ins, +%% caption.dtx, caption2.dtx, caption3.dtx, +%% bicaption.dtx, ltcaption.dtx, subcaption.dtx, +%% newfloat.dtx, and totalcount.dtx +%% the derived files +%% caption.sty, caption2.sty, caption3.sty, +%% bicaption.sty, ltcaption.sty, subcaption.sty, +%% newfloat.sty, and totalcount.sty +%% and the user manuals +%% caption-deu.tex, caption-eng.tex, and caption-rus.tex. +%% +\NeedsTeXFormat{LaTeX2e}[1994/12/01] +\def\caption@tempa$Id: #1 #2 #3-#4-#5 #6${% + \def\caption@tempa{#3/#4/#5 }\def\caption@tempb{#2 }} +\caption@tempa $Id: newfloat.dtx 109 2015-09-17 09:29:07Z sommerfeldt $ +\ProvidesPackage{newfloat}[\caption@tempa v1.1-\caption@tempb Defining new floating environments (AR)] +\newcommand*\newfloat@Info[1]{% + \PackageInfo{newfloat}{#1}} +\newcommand*\newfloat@InfoNoLine[1]{% + \newfloat@Info{#1\@gobble}} +\newcommand*\newfloat@Error[1]{% + \PackageError{newfloat}{#1}\newfloat@eh} +\newcommand*\newfloat@eh{% + If you do not understand this error, please take a closer look\MessageBreak + at the documentation of the `newfloat' package.\MessageBreak\@ehc} +\RequirePackage{keyval}[1997/11/10] +\newcommand*\newfloat@def[2]{% + \newfloat@ifundefined{#1}{% + \@namedef{#1}{#2}}} +\newcommand*\newfloat@let[2]{% + \newfloat@ifundefined{#1}{% + \expandafter\let\csname #1\endcsname#2}} +\newcommand*\newfloat@ifundefined[2]{% + \@ifundefined{#1}{#2}{% + \newfloat@Info{% + \expandafter\string\csname#1\endcsname\space is already defined}}} +\newcommand*\DeclareFloatingEnvironment{% + \@testopt\@DeclareFloatingEnvironment{}} +\@onlypreamble\DeclareFloatingEnvironment +\def\@DeclareFloatingEnvironment[#1]#2{% + \newfloat@Info{New float `#2' with options `#1'}% + \newfloat@ifundefined{c@#2}{\newcounter{#2}}% + \ifdefined\c@float@type % from float package + \expandafter\edef\csname ftype@#2\endcsname{\the\value{float@type}}% + \addtocounter{float@type}{\value{float@type}}% + \else\ifdefined\c@newflo@tctr % from memoir document class + \expandafter\edef\csname ftype@#2\endcsname{\the\c@newflo@tctr}% + \advance\c@newflo@tctr \c@newflo@tctr + \else + \ifdefined\newfloat@ftype \else + \newcount\newfloat@ftype + \newfloat@ftype=8\relax + \fi + \expandafter\xdef\csname ftype@#2\endcsname{\the\newfloat@ftype}% + \advance\newfloat@ftype\newfloat@ftype + \fi\fi + \newfloat@Info{float type `#2'=\@nameuse{ftype@#2}}% + \newfloat@def{fnum@#2}% + {\@nameuse{#2name}\nobreakspace\@nameuse{the#2}\@nameuse{autodot}}% + \newfloat@capitalize\newfloat@Type{#2}% + \newfloat@let{#2name}{\newfloat@Type}% + \newfloat@def{fleg#2}{\@nameuse{#2name}}% legend naming (memoir) + \newfloat@ifundefined{flegtoc#2}{\@namedef{flegtoc#2}##1{}}% + \ifcsname @tufte@float\endcsname + \newenvironment{#2}[1][htbp]% + {\begin{@tufte@float}[##1]{#2}{}}% + {\end{@tufte@float}}% + \newenvironment{#2*}[1][htbp]% + {\begin{@tufte@float}[##1]{#2}{star}}% + {\end{@tufte@float}}% + \else + \newenvironment{#2}{\@float{#2}}{\end@float}% + \newenvironment{#2*}{\@dblfloat{#2}}{\end@dblfloat}% + \fi + \newfloat@def{listof#2}{\newfloat@listof{#2}}% + \newfloat@def{listof#2s}{\@nameuse{listof#2}}% + \newfloat@def{listof#2es}{\@nameuse{listof#2s}}% + \newfloat@def{newfloat@listof#2@hook}{}% + \ifdefined\l@figure + \newfloat@let{l@#2}{\l@figure}% + \else + \newfloat@def{l@#2}{\@dottedtocline{1}{1.5em}{2.3em}}% + \fi + \edef\newfloat@tempa{List of \newfloat@Type s}% + \newfloat@let{list#2name}{\newfloat@tempa}% + \expandafter\let\csname fst@#2\endcsname\@undefined + \newfloat@ifundefined{fps@#2}{\newfloat@setplacement{#2}{tbp}}% + \newfloat@ifundefined{ext@#2}{\newfloat@setfileext{#2}{lo#2}}% + \newfloat@setoptions*{#2}{#1}% + \@expandtwoargs\newfloat@announce{#2}{\@nameuse{ext@#2}}% + \@ifnextchar[\newfloat@DFE@setname\relax} +\@onlypreamble\@DeclareFloatingEnvironment +\def\newfloat@DFE@setname[#1]{% + \KV@@newfloat@name{#1}% + \@ifnextchar[\newfloat@DFE@setlistname\relax} +\@onlypreamble\newfloat@DFE@setname +\def\newfloat@DFE@setlistname[#1]{% + \KV@@newfloat@listname{#1}} +\@onlypreamble\newfloat@DFE@setlistname +\newcommand*\newfloat@capitalize[2]{% + \edef\newfloat@tempa{\gdef\noexpand#1{\@car#2\@nil}}% + \uppercase\expandafter{\newfloat@tempa}% + \edef\newfloat@tempa{% + \noexpand\g@addto@macro\noexpand#1{\@cdr#2\@nil}}% + \newfloat@tempa} +\newcommand*\newfloat@listof[1]{% + \@expandtwoargs\newfloat@list@of{#1}{\@nameuse{ext@#1}}} +\newcommand*\newfloat@list@of[2]{% + \begingroup + \expandafter\let\expandafter\listfigurename\csname list#1name\endcsname + \def\ext@figure{#2}% + \let\newfloat@starttoc\@starttoc + \def\@starttoc##1{\newfloat@starttoc{#2}}% + \let\newfloat@listoftoc\listoftoc + \def\listoftoc##1{\newfloat@listoftoc{#2}}% + \@nameuse{newfloat@listof#1@hook}% + \listoffigures + \endgroup} +\newcommand*\newfloat@setoptions{% + \@ifstar + {\newfloat@@setoptions\@firstofone}% + {\newfloat@@setoptions\@gobble}} +\newcommand*\newfloat@@setoptions[3]{% + \let\newfloat@within@value\@undefined + \let\newfloat@chapterlistsgaps@value\@undefined + #1{\KV@@newfloat@within\newfloat@within@default}% set default value for new floats + \def\newfloat@type{#2}% + \setkeys{@newfloat}{#3}% + \ifx\newfloat@within@value\@undefined \else + \newfloat@setoption{within}\newfloat@within@value + \fi + \ifx\newfloat@chapterlistsgaps@value\@undefined \else + \newfloat@setoption{chapterlistsgaps}\newfloat@chapterlistsgaps@value + \fi} +\newcommand*\newfloat@within@default{% + \ifcsname c@chapter\endcsname chapter\else none\fi} +\@onlypreamble\newfloat@within@default +\newcommand*\newfloat@setoption[1]{% + \edef\caption@tempa{\noexpand\@nameuse{newfloat@set#1}{\newfloat@type}}% + \caption@tempa} +\newcommand*\newfloat@setfileext[2]{% + \@namedef{ext@#1}{#2}} +\define@key{@newfloat}{fileext}{% + \newfloat@setoption{fileext}{#1}} +\newcommand*\newfloat@setlistname[2]{% + \@namedef{list#1name}{#2}} +\define@key{@newfloat}{listname}{% + \newfloat@setoption{listname}{#1}} +\newcommand*\newfloat@setname[2]{% + \newfloat@@setname{#1}{#2}% + \begingroup + \ifcsname languagename\endcsname + \ifcsname captions\languagename\endcsname + \expandafter\g@addto@macro\csname captions\languagename\endcsname + {\newfloat@@setname{#1}{#2}}% + \fi + \fi + \endgroup} +%%\AtBeginDocument{\let\newfloat@setname\newfloat@@setname} +\newcommand*\newfloat@@setname[2]{% + \@namedef{#1name}{#2}} +\define@key{@newfloat}{name}{% + \newfloat@setoption{name}{#1}} +\newcommand*\newfloat@setplacement[2]{% + \@namedef{fps@#1}{#2}} +\define@key{@newfloat}{placement}{% + \newfloat@setoption{placement}{#1}} +\newcommand*\newfloat@setwithin[2]{% + \ifcsname c@chapter\endcsname + \@removefromreset{#1}{chapter}% + \fi + \@removefromreset{#1}{section}% + \edef\@tempa{#2}% + \ifx\@tempa\@empty + \def\@tempa{none}% + \fi + \def\@tempb{none}% + \ifx\@tempa\@tempb + \ifcsname c@chapter\endcsname + \@chapterlistsgap@off{#1}% + \fi + \newfloat@@setwithin{#1}{}{}% + \else + \def\@tempb{chapter}% + \ifx\@tempa\@tempb + \@addtoreset{#1}{chapter}% + \@chapterlistsgap@on{#1}% + \newfloat@@setwithin{#1}{\ifnum\c@chapter>\z@ \thechapter.\fi}{\theHchapter.}% + \else + \def\@tempb{section}% + \ifx\@tempa\@tempb + \@addtoreset{#1}{section}% + \ifcsname c@chapter\endcsname + \@addtoreset{#1}{chapter}% + \@chapterlistsgap@on{#1}% + \newfloat@@setwithin{#1}{\thesection.}{\theHsection.}% + \else + \newfloat@@setwithin{#1}{\ifnum\c@section>\z@ \thesection.\fi}{\theHsection.}% + \fi + \else + \newfloat@Error{Invalid value `#2' for option `within'}% + \fi + \fi + \fi} +\newcommand*\newfloat@@setwithin[3]{% + \global\@namedef{the#1}{#2\arabic{#1}}% + \global\@namedef{theH#1}{#3\arabic{#1}}} +\define@key{@newfloat}{within}{% + \def\newfloat@within@value{#1}} +\newcommand*\newfloat@setwithout[1]{% + \newfloat@setwithin{#1}{none}} +\define@key{@newfloat}{without}[]{% + \def\newfloat@within@value{none}} +\newcommand*\newfloat@setchapterlistsgaps[2]{% + \edef\@tempa{#2}% + \def\@tempb{off}% + \ifx\@tempa\@tempb + \@chapterlistsgap@off{#1}% + \else + \def\@tempb{on}% + \ifx\@tempa\@tempb + \@chapterlistsgap@on{#1}% + \else + \newfloat@Error{Invalid value `#2' for option `chapterlistsgaps'}% + \fi + \fi} +\define@key{@newfloat}{chapterlistsgaps}{% + \def\newfloat@chapterlistsgaps@value{#1}} +\providecommand*\@removefromreset[2]{{% + \expandafter\let\csname c@#1\endcsname\@removefromreset + \def\@elt##1{% + \expandafter\ifx\csname c@##1\endcsname\@removefromreset + \else + \noexpand\@elt{##1}% + \fi}% + \expandafter\xdef\csname cl@#2\endcsname{% + \csname cl@#2\endcsname}}} +\newcommand*\newfloat@announce[2]{% + \@cons\newfloat@list{{#1}}% + \@cons\newfloat@@list{{#1}}% + \newfloat@ifundefined{newfloat@ext@#2}{% + \@namedef{newfloat@ext@#2}{#1}% + \ifcsname c@lofdepth\endcsname + \newfloat@ifundefined{c@#2depth}{% + \newcounter{#2depth}% + \setcounter{#2depth}{1}}% + \fi + \ifcsname addtotoclist\endcsname + \addtotoclist[float]{#2}% + \newfloat@def{listof#2name}{\@nameuse{list#1name}}% + \fi + }% + \ifcsname contentsuse\endcsname + \contentsuse{#1}{#2}% + \fi + \newfloat@hook{#1}} +\@onlypreamble\newfloat@announce +\newcommand*\newfloat@@list{} +\newcommand*\SetupFloatingEnvironment[1]{% + \newfloat@addtolist{#1}% + \newfloat@setoptions{#1}} +\newcommand\ForEachFloatingEnvironment{% + \@ifstar + {\@ForEachFloatingEnvironment\@gobble}% + {\@ForEachFloatingEnvironment\@iden}} +\newcommand\@ForEachFloatingEnvironment[2]{% + \def\@elt##1{#2}% + \newfloat@list + \let\@elt\relax + #1{\newfloat@addtohook{#2}}} +\providecommand\newfloat@addtohook[1]{% + \toks@=\expandafter{\newfloat@hook{##1}#1}% + \edef\@tempa{\def\noexpand\newfloat@hook####1{\the\toks@}}% + \@tempa} +\providecommand*\newfloat@hook[1]{} +\newcommand\PrepareListOf[1]{% + \expandafter\g@addto@macro\csname newfloat@listof#1@hook\endcsname} +\@onlypreamble\PrepareListOf +\newcommand*\newfloat@list{} +\newcommand*\newfloat@addtolist[1]{% + \newfloat@ifinlist{#1}{}{% + \ifcsname ext@#1\endcsname + \@cons\newfloat@list{{#1}}% + \@namedef{newfloat@ext@\@nameuse{ext@#1}}{#1}% + \newfloat@let{@ifchapterlistsgap@#1}{\@iden}% + \else + \newfloat@Error{`#1' does not seem to be a floating environment}% + \fi}} +\newcommand*\newfloat@ifinlist[1]{% + \let\next\@secondoftwo + \begingroup + \expandafter\let\csname c@#1\endcsname\newfloat@ifinlist + \def\@elt##1{% + \expandafter\ifx\csname c@##1\endcsname\newfloat@ifinlist + \global\let\next\@firstoftwo + \fi}% + \newfloat@list + \endgroup + \next} +\ifcsname ext@figure\endcsname + \newfloat@addtolist{figure} +\fi +\ifcsname ext@table\endcsname + \newfloat@addtolist{table} +\fi +\ifcsname @chapter\endcsname + \providecommand*\@chapterlistsgap{10\p@}% + \providecommand*\@addchapterlistsgap[2]{% + \@nameuse{@ifchapterlistsgap@#1}{% if switched on + \@@addchapterlistsgap{#1}{#2}}} + \providecommand*\@@addchapterlistsgap[2]{% + \@ifundefined{@addchapterlistsgap@#2}{% only once per extension + \@namedef{@addchapterlistsgap@#2}{#1}% + \@@@addchapterlistsgap{#2}}{}} + \providecommand*\@@@addchapterlistsgap[1]{% + \ifdim \@chapterlistsgap>\z@ + \addtocontents{#1}{\protect\addvspace{\@chapterlistsgap}}% + \fi} + \providecommand*\@addchapterlistsgaps{% + \begingroup + \def\@elt##1{% + \@expandtwoargs\@addchapterlistsgap{##1}{\@nameuse{ext@##1}}}% + \newfloat@list + \endgroup} + \providecommand*\@chapterlistsgap@off[1]{% + \expandafter\let\csname @ifchapterlistsgap@#1\endcsname\@gobble + \ifcsname unsettoc\endcsname + \@expandtwoargs\unsettoc{\@nameuse{ext@#1}}{chapteratlist}% + \fi} + \providecommand*\@chapterlistsgap@on[1]{% + \expandafter\let\csname @ifchapterlistsgap@#1\endcsname\@iden + \ifcsname setuptoc\endcsname + \@expandtwoargs\setuptoc{\@nameuse{ext@#1}}{chapteratlist}% + \fi} +\fi +\define@key{newfloat}{chapterlistsgap}{% + \renewcommand*\@chapterlistsgap{#1}} +\define@key{newfloat}{within}{% + \def\newfloat@within@default{#1}% set new default value + \def\@elt##1{\newfloat@setwithin{##1}{#1}}% + \newfloat@list + \let\@elt\relax} +\define@key{newfloat}{without}[]{% + \KV@newfloat@within{none}} +\def\@elt#1{% + \define@key{newfloat}{#1name}{% + \newfloat@setname{#1}{##1}}% + \define@key{newfloat}{list#1name}{% + \newfloat@setname{list#1}{##1}}% + \define@key{newfloat}{#1within}{% + \newfloat@setwithin{#1}{##1}}% + \define@key{newfloat}{#1without}[]{% + \newfloat@setwithout{#1}}% +}% +\newfloat@list +\let\@elt\relax +\define@key{newfloat}{planb}[true]{% + \def\@tempa{#1}% + \def\@tempb{false}% + \ifx\@tempa\@tempb + \let\newfloat@ifplanb\@gobble + \else + \def\@tempb{true}% + \ifx\@tempa\@tempb + \let\newfloat@ifplanb\@iden + \else + \newfloat@Error{Invalid value `#1' for option `planb'}% + \fi + \fi} +\define@key{newfloat}{planb-fileext}{% + \newfloat@Info{Setting Plan B file extension to `#1'} + \xdef\newfloat@addtocontents@ext{#1}} + +\let\@tempc\relax +\@expandtwoargs\setkeys{newfloat}{planb,\@ptionlist{\@currname.\@currext}}% +\AtEndOfPackage{\let\@unprocessedoptions\relax} +\newcommand*\newfloatsetup{\setkeys{newfloat}} +\newcommand\newfloat@replace@chapter[2]{% + \begingroup + \let\if@twocolumn\iffalse + \let\if@mainmatter\iffalse + \let\if@thema\iffalse + \def\@tempa[##1]##2{#1}% + \ifx\@tempa\@chapter + \gdef\@chapter[##1]##2{#2}% + \global\let\newfloat@replace@chapter\@gobbletwo + \else\ifx\@tempa\Hy@org@chapter + \gdef\Hy@org@chapter[##1]##2{#2}% + \global\let\newfloat@replace@chapter\@gobbletwo + \fi\fi + \endgroup} +\ifcsname @chapter\endcsname \else + \let\newfloat@replace@chapter\@gobbletwo +\fi +\newfloat@replace@chapter{% + \ifnum \c@secnumdepth >\m@ne + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}#1}% + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi +}{% + \ifnum \c@secnumdepth >\m@ne + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}#1}% + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \@addchapterlistsgaps + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi} +\newfloat@replace@chapter{% + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}#1}% + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi +}{% + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}#1}% + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \@addchapterlistsgaps + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi} +\newfloat@replace@chapter{% + \refstepcounter{chapter}% + \ifnum\c@secnumdepth<\z@ \let\@secnumber\@empty + \else \let\@secnumber\thechapter \fi + \typeout{\chaptername\space\@secnumber}% + \def\@toclevel{0}% + \ifx\chaptername\appendixname \@tocwriteb\tocappendix{chapter}{#2}% + \else \@tocwriteb\tocchapter{chapter}{#2}\fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \@makechapterhead{#2}\@afterheading +}{% + \refstepcounter{chapter}% + \ifnum\c@secnumdepth<\z@ \let\@secnumber\@empty + \else \let\@secnumber\thechapter \fi + \typeout{\chaptername\space\@secnumber}% + \def\@toclevel{0}% + \ifx\chaptername\appendixname \@tocwriteb\tocappendix{chapter}{#2}% + \else \@tocwriteb\tocchapter{chapter}{#2}\fi + \chaptermark{#1}% + \@addchapterlistsgaps + \@makechapterhead{#2}\@afterheading} +\@ifpackageloaded{tocbasic}{% + \let\newfloat@replace@chapter\@gobbletwo}{} +\ifcsname insertchapterspace\endcsname + \renewcommand*\insertchapterspace{\@addchapterlistsgaps} + \let\newfloat@replace@chapter\@gobbletwo +\fi +\newfloat@replace@chapter{% + \ifnum \c@secnumdepth >\m@ne + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}\toc@font0 #1}% + \else + \addcontentsline{toc}{chapter}{\toc@font0 #1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi +}{% + \ifnum \c@secnumdepth >\m@ne + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}\toc@font0 #1}% + \else + \addcontentsline{toc}{chapter}{\toc@font0 #1}% + \fi + \chaptermark{#1}% + \@addchapterlistsgaps + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi} + % boek(3).cls [2004/06/07 v2.1a NTG LaTeX document class] +\newfloat@replace@chapter{% + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}\toc@font0 #1}% + \else + \addcontentsline{toc}{chapter}{\toc@font0 #1}% + \fi + \else + \addcontentsline{toc}{chapter}{\toc@font0 #1}% + \fi + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi +}{% + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}\toc@font0 #1}% + \else + \addcontentsline{toc}{chapter}{\toc@font0 #1}% + \fi + \else + \addcontentsline{toc}{chapter}{\toc@font0 #1}% + \fi + \chaptermark{#1}% + \@addchapterlistsgaps + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi} +\newfloat@replace@chapter{% + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\chaptername\space\thechapter.} + \if@thema + \ifx\@shortauthor\@empty + \addcontentsline{toc}{chapter}{% + \protect\numberline{\thechapter.}#1}% + \else + \addcontentsline{toc}{chapter}{% + \protect\numberline{\thechapter.}% + \@shortauthor\hfill\mbox{}\vskip\normallineskip #1}% + \fi + \else + \addcontentsline{toc}{chapter}{% + \protect\numberline{\thechapter.}#1}% + \fi + \else + \addcontentsline{toc}{chapter}{#1} + \fi + \else + \addcontentsline{toc}{chapter}{#1} + \fi + \chaptermark{#1} + \addtocontents{lof}{\protect\addvspace{10pt}} + \addtocontents{lot}{\protect\addvspace{10pt}} + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}] + \else + \@makechapterhead{#2} + \@afterheading + \fi +}{% + \ifnum \c@secnumdepth >\m@ne + \if@mainmatter + \refstepcounter{chapter}% + \typeout{\chaptername\space\thechapter.}% + \if@thema + \ifx\@shortauthor\@empty + \addcontentsline{toc}{chapter}{% + \protect\numberline{\thechapter.}#1}% + \else + \addcontentsline{toc}{chapter}{% + \protect\numberline{\thechapter.}% + \@shortauthor\hfill\mbox{}\vskip\normallineskip #1}% + \fi + \else + \addcontentsline{toc}{chapter}{% + \protect\numberline{\thechapter.}#1}% + \fi + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \else + \addcontentsline{toc}{chapter}{#1}% + \fi + \chaptermark{#1}% + \@addchapterlistsgaps + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi} +\ifx\newfloat@replace@chapter\@gobbletwo \else + \newfloat@InfoNoLine{% + Unsupported document class, or \noexpand\@chapter\MessageBreak + was already redefined by another package} + \newfloat@InfoNoLine{\string\@chapter\space=\space\meaning\@chapter} + \newfloat@InfoNoLine{\string\Hy@org@chapter\space=\space\meaning\Hy@org@chapter} + \newfloat@ifplanb{% + \newfloat@InfoNoLine{Trying Plan B..}% + \let\newfloat@addtocontents@ORI\addtocontents + \long\def\addtocontents#1#2{% + \newfloat@addtocontents{#1}{#2}#2\addvspace\newfloat@nil}% + \long\def\newfloat@addtocontents#1#2#3\addvspace#4\newfloat@nil{% + \def\newfloat@tempa{#4}% + \ifx\newfloat@tempa\@empty + \newfloat@addtocontents@ORI{#1}{#2}% + \else + \ifx\newfloat@addtocontents@ext\@undefined + \newfloat@Info{Setting Plan B file extension to `#1'...}% + \xdef\newfloat@addtocontents@ext{#1}% + \fi + \edef\newfloat@tempa{#1}% + \ifx\newfloat@tempa\newfloat@addtocontents@ext + \begingroup + \let\addtocontents\newfloat@addtocontents@ORI + \@addchapterlistsgaps + \endgroup + \fi + \fi}} +\fi +\newcommand\newfloat@ForEachNew[2][newfloat@@list]{% + \AtBeginDocument{% + \ifcsname#1\endcsname + \def\@elt##1{#2}% + \newfloat@@list + \let\@elt\relax + \fi}}% +\@onlypreamble\newfloat@ForEachNew +%% \begin{macrocode} +\newfloat@ForEachNew[float@exts]{% + \@nameuse{@ifchapterlistsgap@#1}{% if switched on + \let\float@do=\relax + \edef\@tempa{% + \noexpand\float@exts{\the\float@exts\float@do{\@nameuse{ext@#1}}}}% + \@tempa}} +\newfloat@ForEachNew[FP@floatBegin]{% + \newcounter{FP@#1C}% + \newenvironment{FP#1}{\FP@floatBegin{#1}}{\FP@floatEnd}} +\providecommand*\ext@lstlisting{lol}% +\newfloat@ForEachNew[@rotfloat]{% + \newenvironment{sideways#1}{\@rotfloat{#1}}{\end@rotfloat}% + \newenvironment{sideways#1*}{\@rotdblfloat{#1}}{\end@rotdblfloat}} +\newcommand*\newfloat@For@SC[2]{% + \def#1{b}% = \sidecaptionvpos{#2}{b} (v1.6) + \newenvironment{SC#2}% + {\SC@float[#1]{#2}}{\endSC@float}% + \newenvironment{SC#2*}% + {\SC@dblfloat[#1]{#2}}{\endSC@dblfloat}} +\@onlypreamble\newfloat@For@SC +\newfloat@ForEachNew[SC@float]{% + \expandafter\newfloat@For@SC\csname SC@#1@vpos\endcsname{#1}} +\newfloat@ForEachNew[wrapfloat]{% + \newenvironment{wrap#1}{\wrapfloat{#1}}{\endwrapfloat}} +\endinput +%% +%% End of file `newfloat.sty'. diff --git a/docs/_build/latex/python.ist b/docs/_build/latex/python.ist new file mode 100644 index 0000000000000000000000000000000000000000..9ffa0f959f9e60e18c3a7f5fcd518a34964bf68c --- /dev/null +++ b/docs/_build/latex/python.ist @@ -0,0 +1,11 @@ +line_max 100 +headings_flag 1 +heading_prefix " \\bigletter " + +preamble "\\begin{theindex} +\\def\\bigletter#1{{\\Large\\sffamily#1}\\nopagebreak\\vspace{1mm}} + +" + +symhead_positive "{Symbols}" +numhead_positive "{Numbers}" diff --git a/docs/_build/latex/sphinx.sty b/docs/_build/latex/sphinx.sty new file mode 100644 index 0000000000000000000000000000000000000000..d025a07973265e5d4af5204b76df78a316ab5161 --- /dev/null +++ b/docs/_build/latex/sphinx.sty @@ -0,0 +1,917 @@ +% +% sphinx.sty +% +% Adapted from the old python.sty, mostly written by Fred Drake, +% by Georg Brandl. +% + +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesPackage{sphinx}[2010/01/15 LaTeX package (Sphinx markup)] + +% this is the \ltx@ifundefined of ltxcmds.sty, which is loaded by +% hyperref.sty, but we need it before, and initial ltxcmds.sty +% as in TL2009/Debian had wrong definition. +\newcommand{\spx@ifundefined}[1]{% + \ifcsname #1\endcsname + \expandafter\ifx\csname #1\endcsname\relax + \expandafter\expandafter\expandafter\@firstoftwo + \else + \expandafter\expandafter\expandafter\@secondoftwo + \fi + \else + \expandafter\@firstoftwo + \fi +} + +\@ifclassloaded{memoir}{}{\RequirePackage{fancyhdr}} + +% for \text macro and \iffirstchoice@ conditional even if amsmath not loaded +\RequirePackage{amstext} +\RequirePackage{textcomp} +% fancybox not used anymore and will be removed at Sphinx-1.5 +\RequirePackage{fancybox} +\RequirePackage{titlesec} +\RequirePackage{tabulary} +\RequirePackage{makeidx} +% For framing code-blocks and warning type notices, and shadowing topics +\RequirePackage{framed} +\newif\ifspx@inframed % flag set if we are in a framed environment +% ifthen not used anymore and will be removed at Sphinx-1.5 +\RequirePackage{ifthen} +% The xcolor package draws better fcolorboxes around verbatim code +\IfFileExists{xcolor.sty}{ + \RequirePackage{xcolor} +}{ + \RequirePackage{color} +} +% For highlighted code. +\RequirePackage{fancyvrb} +% For table captions. +\RequirePackage{threeparttable} +% Handle footnotes in tables. +\RequirePackage{footnote} +\makesavenoteenv{tabulary} +% For floating figures in the text. +\RequirePackage{wrapfig} +% Separate paragraphs by space by default. +\RequirePackage{parskip} +% For parsed-literal blocks. +\RequirePackage{alltt} +% Display "real" single quotes in literal blocks. +\RequirePackage{upquote} +% For the H specifier. Do not \restylefloat{figure}, it breaks Sphinx code +% for allowing figures in tables. +\RequirePackage{float} + +% Redefine these colors to your liking in the preamble. +\definecolor{TitleColor}{rgb}{0.126,0.263,0.361} +\definecolor{InnerLinkColor}{rgb}{0.208,0.374,0.486} +\definecolor{OuterLinkColor}{rgb}{0.216,0.439,0.388} +% Redefine these colors to something if you want to have colored +% background and border for code examples. +\definecolor{VerbatimColor}{rgb}{1,1,1} +\definecolor{VerbatimBorderColor}{rgb}{0,0,0} + +% Uncomment these two lines to ignore the paper size and make the page +% size more like a typical published manual. +%\renewcommand{\paperheight}{9in} +%\renewcommand{\paperwidth}{8.5in} % typical squarish manual +%\renewcommand{\paperwidth}{7in} % O'Reilly ``Programmming Python'' + +% use pdfoutput for pTeX and dvipdfmx +% when pTeX (\kanjiskip is defined), set pdfoutput to evade \include{pdfcolor} +\ifx\kanjiskip\undefined\else + \newcount\pdfoutput\pdfoutput=0 +\fi + +\RequirePackage{graphicx} + +% for PDF output, use colors and maximal compression +\newif\ifsphinxpdfoutput % used in \maketitle +\ifx\pdfoutput\undefined\else + \ifnum\pdfoutput=\z@ + \let\py@NormalColor\relax + \let\py@TitleColor\relax + \else + \sphinxpdfoutputtrue + \input{pdfcolor} + \def\py@NormalColor{\color[rgb]{0.0,0.0,0.0}} + \def\py@TitleColor{\color{TitleColor}} + \pdfcompresslevel=9 + \fi +\fi + +% XeLaTeX can do colors, too +\ifx\XeTeXrevision\undefined\else + \def\py@NormalColor{\color[rgb]{0.0,0.0,0.0}} + \def\py@TitleColor{\color{TitleColor}} +\fi + +% Increase printable page size (copied from fullpage.sty) +\topmargin 0pt +\advance \topmargin by -\headheight +\advance \topmargin by -\headsep + +% attempt to work a little better for A4 users +\textheight \paperheight +\advance\textheight by -2in + +\oddsidemargin 0pt +\evensidemargin 0pt +%\evensidemargin -.25in % for ``manual size'' documents +\marginparwidth 0.5in + +\textwidth \paperwidth +\advance\textwidth by -2in + + +% Style parameters and macros used by most documents here +\raggedbottom +\sloppy +\hbadness = 5000 % don't print trivial gripes + +\pagestyle{empty} % start this way + +% Use this to set the font family for headers and other decor: +\newcommand{\py@HeaderFamily}{\sffamily\bfseries} +\newcommand{\sphinxSetHeaderFamily}[1]{\renewcommand{\py@HeaderFamily}{#1}} + +% Redefine the 'normal' header/footer style when using "fancyhdr" package: +\spx@ifundefined{fancyhf}{}{ + % Use \pagestyle{normal} as the primary pagestyle for text. + \fancypagestyle{normal}{ + \fancyhf{} + \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage}} + \fancyfoot[LO]{{\py@HeaderFamily\nouppercase{\rightmark}}} + \fancyfoot[RE]{{\py@HeaderFamily\nouppercase{\leftmark}}} + \fancyhead[LE,RO]{{\py@HeaderFamily \@title, \py@release}} + \renewcommand{\headrulewidth}{0.4pt} + \renewcommand{\footrulewidth}{0.4pt} + % define chaptermark with \@chappos when \@chappos is available for Japanese + \spx@ifundefined{@chappos}{} + {\def\chaptermark##1{\markboth{\@chapapp\space\thechapter\space\@chappos\space ##1}{}}} + } + % Update the plain style so we get the page number & footer line, + % but not a chapter or section title. This is to keep the first + % page of a chapter and the blank page between chapters `clean.' + \fancypagestyle{plain}{ + \fancyhf{} + \fancyfoot[LE,RO]{{\py@HeaderFamily\thepage}} + \renewcommand{\headrulewidth}{0pt} + \renewcommand{\footrulewidth}{0.4pt} + } +} + +% Some custom font markup commands. +% *** the macros without \sphinx prefix are still defined at bottom of file *** +\newcommand{\sphinxstrong}[1]{{\textbf{#1}}} +% let \sphinxcode and \sphinxbfcode use straight quotes. \@noligs patched by upquote, +% but needs protection in "moving arguments" such as for captions. +% Use \scantokens to handle e.g. \item[{\sphinxcode{'fontenc'}}] +\DeclareRobustCommand{\sphinxcode}[1]{{\@noligs\scantokens{\texttt{#1}\relax}}} +\newcommand{\sphinxbfcode}[1]{\sphinxcode{\bfseries#1}} +\newcommand{\sphinxemail}[1]{\textsf{#1}} +\newcommand{\sphinxtablecontinued}[1]{\textsf{#1}} +\newcommand{\sphinxtitleref}[1]{\emph{#1}} +\newcommand{\sphinxmenuselection}[1]{\emph{#1}} +\newcommand{\sphinxaccelerator}[1]{\underline{#1}} +\newcommand{\sphinxcrossref}[1]{\emph{#1}} +\newcommand{\sphinxtermref}[1]{\emph{#1}} + +% miscellaneous related to footnotes +\newcommand*{\sphinxAtStartFootnote}{\mbox{ }} +% Support large numbered footnotes in minipage (cf. admonitions) +\def\thempfootnote{\arabic{mpfootnote}} + +% Redefine the Verbatim environment to allow border and background colors +% and to handle the top caption in a non separable by pagebreak way. +% The original environment is still used for verbatims within tables. +\let\OriginalVerbatim=\Verbatim +\let\endOriginalVerbatim=\endVerbatim + +\newcommand\spx@colorbox [2]{% +% #1 will be \fcolorbox or, for first part of frame: \spx@fcolorbox +% let the framing obey the current indentation (adapted from framed.sty's code). + \hskip\@totalleftmargin + \hskip-\fboxsep\hskip-\fboxrule + #1{VerbatimBorderColor}{VerbatimColor}{#2}% + \hskip-\fboxsep\hskip-\fboxrule + \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth +} +% use of \color@b@x here is compatible with both xcolor.sty and color.sty +\def\spx@fcolorbox #1#2% + {\color@b@x {\fboxsep\z@\color{#1}\spx@VerbatimFBox}{\color{#2}}}% + +% The title is specified from outside as macro \sphinxVerbatimTitle. +% \sphinxVerbatimTitle is reset to empty after each use of Verbatim. +\newcommand*\sphinxVerbatimTitle {} +% Holder macro for labels of literal blocks. Set-up by LaTeX writer. +\newcommand*\sphinxLiteralBlockLabel {} +\newcommand*\sphinxSetupCaptionForVerbatim [2] +{% + \needspace{\sphinxliteralblockneedspace}% +% insert a \label via \sphinxLiteralBlockLabel +% reset to normal the color for the literal block caption +% the caption inserts \abovecaptionskip whitespace above itself (usually 10pt) +% there is also \belowcaptionskip but it is usually zero, hence the \smallskip + \def\sphinxVerbatimTitle + {\py@NormalColor\captionof{#1}{\sphinxLiteralBlockLabel #2}\smallskip }% +} + +% Inspired and adapted from framed.sty's \CustomFBox with extra handling +% of a non separable by pagebreak caption, and controlled counter stepping. +\newif\ifspx@myfirstframedpass +\long\def\spx@VerbatimFBox#1{% + \leavevmode + \begingroup + % framed.sty does some measuring but this macro adds possibly a caption + % use amsmath conditional to inhibit the caption counter stepping after + % first pass + \ifspx@myfirstframedpass\else\firstchoice@false\fi + \setbox\@tempboxa\hbox{\kern\fboxsep{#1}\kern\fboxsep}% + \hbox + {\lower\dimexpr\fboxrule+\fboxsep+\dp\@tempboxa + \hbox{% + \vbox{\ifx\sphinxVerbatimTitle\empty\else + % add the caption in a centered way above possibly indented frame + % hide its width from framed.sty's measuring step + % note that the caption brings \abovecaptionskip top vertical space + \moveright\dimexpr\fboxrule+.5\wd\@tempboxa + \hb@xt@\z@{\hss\begin{minipage}{\wd\@tempboxa}% + \sphinxVerbatimTitle + \end{minipage}\hss}\fi + % draw frame border _latest_ to avoid pdf viewer issue + \kern\fboxrule + \hbox{\kern\fboxrule + \vbox{\vskip\fboxsep\copy\@tempboxa\vskip\fboxsep}% + \kern-\wd\@tempboxa\kern-\fboxrule + \vrule\@width\fboxrule + \kern\wd\@tempboxa + \vrule\@width\fboxrule}% + \kern-\dimexpr\fboxsep+\ht\@tempboxa+\dp\@tempboxa + +\fboxsep+\fboxrule\relax + \hrule\@height\fboxrule + \kern\dimexpr\fboxsep+\ht\@tempboxa+\dp\@tempboxa+\fboxsep\relax + \hrule\@height\fboxrule}% + }}% + \endgroup + \global\spx@myfirstframedpassfalse +} + +% For linebreaks inside Verbatim environment from package fancyvrb. +\newbox\sphinxcontinuationbox +\newbox\sphinxvisiblespacebox +% These are user customizable e.g. from latex_elements's preamble key. +% Use of \textvisiblespace for compatibility with XeTeX/LuaTeX/fontspec. +\newcommand*\sphinxvisiblespace {\textcolor{red}{\textvisiblespace}} +\newcommand*\sphinxcontinuationsymbol {\textcolor{red}{\llap{\tiny$\m@th\hookrightarrow$}}} +\newcommand*\sphinxcontinuationindent {3ex } +\newcommand*\sphinxafterbreak {\kern\sphinxcontinuationindent\copy\sphinxcontinuationbox} + +% Take advantage of the already applied Pygments mark-up to insert +% potential linebreaks for TeX processing. +% {, <, #, %, $, ' and ": go to next line. +% _, }, ^, &, >, - and ~: stay at end of broken line. +% Use of \textquotesingle for straight quote. +\newcommand*\sphinxbreaksatspecials {% + \def\PYGZus{\discretionary{\char`\_}{\sphinxafterbreak}{\char`\_}}% + \def\PYGZob{\discretionary{}{\sphinxafterbreak\char`\{}{\char`\{}}% + \def\PYGZcb{\discretionary{\char`\}}{\sphinxafterbreak}{\char`\}}}% + \def\PYGZca{\discretionary{\char`\^}{\sphinxafterbreak}{\char`\^}}% + \def\PYGZam{\discretionary{\char`\&}{\sphinxafterbreak}{\char`\&}}% + \def\PYGZlt{\discretionary{}{\sphinxafterbreak\char`\<}{\char`\<}}% + \def\PYGZgt{\discretionary{\char`\>}{\sphinxafterbreak}{\char`\>}}% + \def\PYGZsh{\discretionary{}{\sphinxafterbreak\char`\#}{\char`\#}}% + \def\PYGZpc{\discretionary{}{\sphinxafterbreak\char`\%}{\char`\%}}% + \def\PYGZdl{\discretionary{}{\sphinxafterbreak\char`\$}{\char`\$}}% + \def\PYGZhy{\discretionary{\char`\-}{\sphinxafterbreak}{\char`\-}}% + \def\PYGZsq{\discretionary{}{\sphinxafterbreak\textquotesingle}{\textquotesingle}}% + \def\PYGZdq{\discretionary{}{\sphinxafterbreak\char`\"}{\char`\"}}% + \def\PYGZti{\discretionary{\char`\~}{\sphinxafterbreak}{\char`\~}}% +} + +\def\sphinx@verbatim@nolig@list {\do \`}% +% Some characters . , ; ? ! / are not pygmentized. +% This macro makes them "active" and they will insert potential linebreaks +\newcommand*\sphinxbreaksatpunct {% + \lccode`\~`\.\lowercase{\def~}{\discretionary{\char`\.}{\sphinxafterbreak}{\char`\.}}% + \lccode`\~`\,\lowercase{\def~}{\discretionary{\char`\,}{\sphinxafterbreak}{\char`\,}}% + \lccode`\~`\;\lowercase{\def~}{\discretionary{\char`\;}{\sphinxafterbreak}{\char`\;}}% + \lccode`\~`\:\lowercase{\def~}{\discretionary{\char`\:}{\sphinxafterbreak}{\char`\:}}% + \lccode`\~`\?\lowercase{\def~}{\discretionary{\char`\?}{\sphinxafterbreak}{\char`\?}}% + \lccode`\~`\!\lowercase{\def~}{\discretionary{\char`\!}{\sphinxafterbreak}{\char`\!}}% + \lccode`\~`\/\lowercase{\def~}{\discretionary{\char`\/}{\sphinxafterbreak}{\char`\/}}% + \catcode`\.\active + \catcode`\,\active + \catcode`\;\active + \catcode`\:\active + \catcode`\?\active + \catcode`\!\active + \catcode`\/\active + \lccode`\~`\~ +} + +\renewcommand{\Verbatim}[1][1]{% + % quit horizontal mode if we are still in a paragraph + \par + % list starts new par, but we don't want it to be set apart vertically + \parskip\z@skip + % first, let's check if there is a caption + \ifx\sphinxVerbatimTitle\empty + \addvspace\z@% counteract possible previous negative skip (French lists!) + \smallskip + % there was no caption. Check if nevertheless a label was set. + \ifx\sphinxLiteralBlockLabel\empty\else + % we require some space to be sure hyperlink target from \phantomsection + % will not be separated from upcoming verbatim by a page break + \needspace{\sphinxliteralblockwithoutcaptionneedspace}% + \phantomsection\sphinxLiteralBlockLabel + \fi + \fi + % non-empty \sphinxVerbatimTitle has label inside it (in case there is one) + % Customize framed.sty \MakeFramed to glue caption to literal block + \global\spx@myfirstframedpasstrue + % via \spx@fcolorbox, will use \spx@VerbatimFBox which inserts title + \def\FrameCommand {\spx@colorbox\spx@fcolorbox }% + \let\FirstFrameCommand\FrameCommand + % for mid pages and last page portion of (long) split frame: + \def\MidFrameCommand{\spx@colorbox\fcolorbox }% + \let\LastFrameCommand\MidFrameCommand + % fancyvrb's Verbatim puts each input line in (unbreakable) horizontal boxes. + % This customization wraps each line from the input in a \vtop, thus + % allowing it to wrap and display on two or more lines in the latex output. + % - The codeline counter will be increased only once. + % - The wrapped material will not break across pages, it is impossible + % to achieve this without extensive rewrite of fancyvrb. + % - The (not used in sphinx) obeytabs option to Verbatim is + % broken by this change (showtabs and tabspace work). + \sbox\sphinxcontinuationbox {\sphinxcontinuationsymbol}% + \sbox\sphinxvisiblespacebox {\FV@SetupFont\sphinxvisiblespace}% + \def\FancyVerbFormatLine ##1{\hsize\linewidth + \vtop{\raggedright\hyphenpenalty\z@\exhyphenpenalty\z@ + \doublehyphendemerits\z@\finalhyphendemerits\z@ + \strut ##1\strut}% + }% + % If the linebreak is at a space, the latter will be displayed as visible + % space at end of first line, and a continuation symbol starts next line. + % Stretch/shrink are however usually zero for typewriter font. + \def\FV@Space {% + \nobreak\hskip\z@ plus\fontdimen3\font minus\fontdimen4\font + \discretionary{\copy\sphinxvisiblespacebox}{\sphinxafterbreak} + {\kern\fontdimen2\font}% + }% + % go around fancyvrb's check of @currenvir (for case of minipage below) + \renewcommand*{\VerbatimEnvironment}{\gdef\FV@EnvironName{Verbatim}}% + % go around fancyvrb's check of current list depth + \def\@toodeep {\advance\@listdepth\@ne}% + % Allow breaks at special characters using \PYG... macros. + \sphinxbreaksatspecials + % The list environment is needed to control perfectly the vertical space. + % Note: \OuterFrameSep used by framed.sty is later set to \topsep hence 0pt. + % - if caption: vertical space above caption = (\abovecaptionskip + D) with + % D = \baselineskip-\FrameHeightAdjust, and then \smallskip above frame. + % - if no caption: (\smallskip + D) above frame. By default D=6pt. + % Use trivlist rather than list to avoid possible "too deeply nested" error. + \itemsep \z@skip + \topsep \z@skip + \partopsep \z@skip% trivlist will set \parsep to \parskip = zero (see above) + % \leftmargin will be set to zero by trivlist + \rightmargin\z@ + \parindent \z@% becomes \itemindent. Default zero, but perhaps overwritten. + \trivlist\item\relax + % use a minipage if we are already inside a framed environment + \ifspx@inframed\noindent\begin{minipage}{\linewidth}\fi + \MakeFramed {% adapted over from framed.sty's snugshade environment + \advance\hsize-\width\@totalleftmargin\z@\linewidth\hsize + \@setminipage }% + \small + % For grid placement from \strut's in \FancyVerbFormatLine + \lineskip\z@skip + % Breaks at punctuation characters . , ; ? ! and / need catcode=\active + % and the active comma should not be overwritten by \@noligs + \let\verbatim@nolig@list \sphinx@verbatim@nolig@list + \OriginalVerbatim[#1,codes*=\sphinxbreaksatpunct]% +} +\renewcommand{\endVerbatim}{% + \endOriginalVerbatim + \par\unskip\@minipagefalse\endMakeFramed + \ifspx@inframed\end{minipage}\fi + \endtrivlist +} + +% define macro to frame contents and add shadow on right and bottom +% use public names for customizable lengths +\newlength\sphinxshadowsep \setlength\sphinxshadowsep {5pt} +\newlength\sphinxshadowsize \setlength\sphinxshadowsize {4pt} +\newlength\sphinxshadowrule +% this uses \fboxrule value at loading time of sphinx.sty (0.4pt normally) +\setlength\sphinxshadowrule {\fboxrule} + +\long\def\spx@ShadowFBox#1{% + \leavevmode\begingroup + % first we frame the box #1 + \setbox\@tempboxa + \hbox{\vrule\@width\sphinxshadowrule + \vbox{\hrule\@height\sphinxshadowrule + \kern\sphinxshadowsep + \hbox{\kern\sphinxshadowsep #1\kern\sphinxshadowsep}% + \kern\sphinxshadowsep + \hrule\@height\sphinxshadowrule}% + \vrule\@width\sphinxshadowrule}% + % Now we add the shadow, like \shadowbox from fancybox.sty would do + \dimen@\dimexpr.5\sphinxshadowrule+\sphinxshadowsize\relax + \hbox{\vbox{\offinterlineskip + \hbox{\copy\@tempboxa\kern-.5\sphinxshadowrule + % add shadow on right side + \lower\sphinxshadowsize + \hbox{\vrule\@height\ht\@tempboxa \@width\dimen@}% + }% + \kern-\dimen@ % shift back vertically to bottom of frame + % and add shadow at bottom + \moveright\sphinxshadowsize + \vbox{\hrule\@width\wd\@tempboxa \@height\dimen@}% + }% + % move left by the size of right shadow so shadow adds no width + \kern-\sphinxshadowsize + }% + \endgroup +} + +% use framed.sty to allow page breaks in frame+shadow +% works well inside Lists and Quote-like environments +% produced by ``topic'' directive (or local contents) +% could nest if LaTeX writer authorized it +\newenvironment{sphinxShadowBox} + {\def\FrameCommand {\spx@ShadowFBox }% + % configure framed.sty not to add extra vertical spacing + \spx@ifundefined{OuterFrameSep}{}{\OuterFrameSep\z@skip}% + % the \trivlist will add the vertical spacing on top and bottom which is + % typical of center environment as used in Sphinx <= 1.4.1 + % the \noindent has the effet of an extra blank line on top, to + % imitate closely the layout from Sphinx <= 1.4.1; the \FrameHeightAdjust + % will put top part of frame on this baseline. + \def\FrameHeightAdjust {\baselineskip}% + \trivlist\item\noindent + % use a minipage if we are already inside a framed environment + \ifspx@inframed\begin{minipage}{\linewidth}\fi + \MakeFramed {\spx@inframedtrue + % framed.sty puts into "\width" the added width (=2shadowsep+2shadowrule) + % adjust \hsize to what the contents must use + \advance\hsize-\width + % adjust LaTeX parameters to behave properly in indented/quoted contexts + \FrameRestore + % typeset the contents as in a minipage (Sphinx <= 1.4.1 used a minipage and + % itemize/enumerate are therein typeset more tightly, we want to keep + % that). We copy-paste from LaTeX source code but don't do a real minipage. + \@pboxswfalse + % for footnotes, but Sphinx inactivates footnotes in topics + \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@ + \let\@footnotetext\@mpfootnotetext + \let\@listdepth\@mplistdepth \@mplistdepth\z@ + \@minipagerestore + \@setminipage + }% + }% + {% insert the "endminipage" code + \par\unskip + % handle (currently non existing) minipage style footnotes + \ifvoid\@mpfootins\else + \vskip\skip\@mpfootins\normalcolor\footnoterule\unvbox\@mpfootins + \fi + \@minipagefalse + \endMakeFramed + \ifspx@inframed\end{minipage}\fi + \endtrivlist + } + + +% \moduleauthor{name}{email} +\newcommand{\moduleauthor}[2]{} + +% \sectionauthor{name}{email} +\newcommand{\sectionauthor}[2]{} + +% Augment the sectioning commands used to get our own font family in place, +% and reset some internal data items: +\titleformat{\section}{\Large\py@HeaderFamily}% + {\py@TitleColor\thesection}{0.5em}{\py@TitleColor}{\py@NormalColor} +\titleformat{\subsection}{\large\py@HeaderFamily}% + {\py@TitleColor\thesubsection}{0.5em}{\py@TitleColor}{\py@NormalColor} +\titleformat{\subsubsection}{\py@HeaderFamily}% + {\py@TitleColor\thesubsubsection}{0.5em}{\py@TitleColor}{\py@NormalColor} +% By default paragraphs (and subsubsections) will not be numbered because +% sphinxmanual.cls and sphinxhowto.cls set secnumdepth to 2 +\titleformat{\paragraph}{\py@HeaderFamily}% + {\py@TitleColor\theparagraph}{0.5em}{\py@TitleColor}{\py@NormalColor} +\titleformat{\subparagraph}{\py@HeaderFamily}% + {\py@TitleColor\thesubparagraph}{0.5em}{\py@TitleColor}{\py@NormalColor} + +% {fulllineitems} is the main environment for object descriptions. +% +\newcommand{\py@itemnewline}[1]{% + \@tempdima\linewidth% + \advance\@tempdima \leftmargin\makebox[\@tempdima][l]{#1}% +} + +\newenvironment{fulllineitems}{ + \begin{list}{}{\labelwidth \leftmargin \labelsep 0pt + \rightmargin 0pt \topsep -\parskip \partopsep \parskip + \itemsep -\parsep + \let\makelabel=\py@itemnewline} +}{\end{list}} + +% \optional is used for ``[, arg]``, i.e. desc_optional nodes. +\newcommand{\sphinxoptional}[1]{% + {\textnormal{\Large[}}{#1}\hspace{0.5mm}{\textnormal{\Large]}}} + +\newlength{\py@argswidth} +\newcommand{\py@sigparams}[2]{% + \parbox[t]{\py@argswidth}{#1\sphinxcode{)}#2}} +\newcommand{\pysigline}[1]{\item[#1]\nopagebreak} +\newcommand{\pysiglinewithargsret}[3]{% + \settowidth{\py@argswidth}{#1\sphinxcode{(}}% + \addtolength{\py@argswidth}{-2\py@argswidth}% + \addtolength{\py@argswidth}{\linewidth}% + \item[#1\sphinxcode{(}\py@sigparams{#2}{#3}]} + +% Production lists +% +\newenvironment{productionlist}{ +% \def\sphinxoptional##1{{\Large[}##1{\Large]}} + \def\production##1##2{\\\sphinxcode{##1}&::=&\sphinxcode{##2}} + \def\productioncont##1{\\& &\sphinxcode{##1}} + \parindent=2em + \indent + \setlength{\LTpre}{0pt} + \setlength{\LTpost}{0pt} + \begin{longtable}[l]{lcl} +}{% + \end{longtable} +} + +% Notices / Admonitions +% + +% Code adapted from framed.sty's "snugshade" environment. +% Nesting works (inner frames do not allow page breaks). +\newcommand{\py@heavybox}{\par + \setlength{\FrameRule}{\p@}% 1pt + \setlength{\FrameSep}{\dimexpr.6\baselineskip-\FrameRule\relax} + % configure framed.sty's parameters to obtain same vertical spacing + % as for "light" boxes. We need for this to manually insert parskip glue and + % revert a skip done by framed before the frame. + \spx@ifundefined{OuterFrameSep}{}{\OuterFrameSep\z@skip}% + \vspace{\FrameHeightAdjust} + % copied/adapted from framed.sty's snugshade + \def\FrameCommand##1{\hskip\@totalleftmargin + \fboxsep\FrameSep \fboxrule\FrameRule\fbox{##1}% + \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}% + % use a minipage if we are already inside a framed environment + \ifspx@inframed + \noindent\begin{minipage}{\linewidth} + \else + % handle case where notice is first thing in a list item (or is quoted) + \if@inlabel + \noindent\par\vspace{-\baselineskip} + \else + \vspace{\parskip} + \fi + \fi + \MakeFramed {\spx@inframedtrue + \advance\hsize-\width \@totalleftmargin\z@ \linewidth\hsize + % minipage initialization copied from LaTeX source code. + \@pboxswfalse + % for footnotes + \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@ + \let\@footnotetext\@mpfootnotetext + \let\@listdepth\@mplistdepth \@mplistdepth\z@ + \@minipagerestore + \@setminipage }% + } +\newcommand{\py@endheavybox}{% + \par\unskip + % handles footnotes + \ifvoid\@mpfootins\else + \vskip\skip\@mpfootins\normalcolor\footnoterule\unvbox\@mpfootins + \fi + \@minipagefalse + \endMakeFramed + \ifspx@inframed\end{minipage}\fi + % arrange for similar spacing below frame as for "light" boxes. + \vskip .4\baselineskip + } + +\newcommand{\py@lightbox}{% + \par\allowbreak + \noindent\rule{\linewidth}{0.5pt}\par\nobreak + {\parskip\z@skip\noindent}% + } +\newcommand{\py@endlightbox}{% + \par + % counteract previous possible negative skip (French lists!): + % (we can't cancel that any earlier \vskip introduced a potential pagebreak) + \ifdim\lastskip<\z@\vskip-\lastskip\fi + \nobreak\vbox{\noindent\kern\@totalleftmargin + \rule[.4\baselineskip]{\linewidth}{0.5pt}\hss}\allowbreak + } + +% Some are quite plain: +\newcommand{\py@noticestart@note}{\py@lightbox} +\newcommand{\py@noticeend@note}{\py@endlightbox} +\newcommand{\py@noticestart@hint}{\py@lightbox} +\newcommand{\py@noticeend@hint}{\py@endlightbox} +\newcommand{\py@noticestart@important}{\py@lightbox} +\newcommand{\py@noticeend@important}{\py@endlightbox} +\newcommand{\py@noticestart@tip}{\py@lightbox} +\newcommand{\py@noticeend@tip}{\py@endlightbox} + +% Others gets more visible distinction: +\newcommand{\py@noticestart@warning}{\py@heavybox} +\newcommand{\py@noticeend@warning}{\py@endheavybox} +\newcommand{\py@noticestart@caution}{\py@heavybox} +\newcommand{\py@noticeend@caution}{\py@endheavybox} +\newcommand{\py@noticestart@attention}{\py@heavybox} +\newcommand{\py@noticeend@attention}{\py@endheavybox} +\newcommand{\py@noticestart@danger}{\py@heavybox} +\newcommand{\py@noticeend@danger}{\py@endheavybox} +\newcommand{\py@noticestart@error}{\py@heavybox} +\newcommand{\py@noticeend@error}{\py@endheavybox} + +\newenvironment{notice}[2]{ + \def\py@noticetype{#1} + \csname py@noticestart@#1\endcsname + \sphinxstrong{#2} % <- legacy code creates a space after {#2} +}{\csname py@noticeend@\py@noticetype\endcsname} + +% Allow the release number to be specified independently of the +% \date{}. This allows the date to reflect the document's date and +% release to specify the release that is documented. +% +\newcommand{\py@release}{} +\newcommand{\version}{} +\newcommand{\shortversion}{} +\newcommand{\releaseinfo}{} +\newcommand{\releasename}{Release} +\newcommand{\release}[1]{% + \renewcommand{\py@release}{\releasename\space\version}% + \renewcommand{\version}{#1}} +\newcommand{\setshortversion}[1]{% + \renewcommand{\shortversion}{#1}} +\newcommand{\setreleaseinfo}[1]{% + \renewcommand{\releaseinfo}{#1}} + +% Allow specification of the author's address separately from the +% author's name. This can be used to format them differently, which +% is a good thing. +% +\newcommand{\py@authoraddress}{} +\newcommand{\authoraddress}[1]{\renewcommand{\py@authoraddress}{#1}} + +% This sets up the fancy chapter headings that make the documents look +% at least a little better than the usual LaTeX output. +% +\spx@ifundefined{ChTitleVar}{}{ + \ChNameVar{\raggedleft\normalsize\py@HeaderFamily} + \ChNumVar{\raggedleft \bfseries\Large\py@HeaderFamily} + \ChTitleVar{\raggedleft \textrm{\Huge\py@HeaderFamily}} + % This creates chapter heads without the leading \vspace*{}: + \def\@makechapterhead#1{% + {\parindent \z@ \raggedright \normalfont + \ifnum \c@secnumdepth >\m@ne + \DOCH + \fi + \interlinepenalty\@M + \DOTI{#1} + } + } +} + +% Redefine description environment so that it is usable inside fulllineitems. +% +\renewcommand{\description}{% + \list{}{\labelwidth\z@% + \itemindent-\leftmargin% + \labelsep5pt% + \let\makelabel=\descriptionlabel}} + +% Definition lists; requested by AMK for HOWTO documents. Probably useful +% elsewhere as well, so keep in in the general style support. +% +\newenvironment{definitions}{% + \begin{description}% + \def\term##1{\item[##1]\mbox{}\\*[0mm]} +}{% + \end{description}% +} + +% Tell TeX about pathological hyphenation cases: +\hyphenation{Base-HTTP-Re-quest-Hand-ler} + + +% The following is stuff copied from docutils' latex writer. +% +\newcommand{\optionlistlabel}[1]{\normalfont\bfseries #1 \hfill}% \bf deprecated +\newenvironment{optionlist}[1] +{\begin{list}{} + {\setlength{\labelwidth}{#1} + \setlength{\rightmargin}{1cm} + \setlength{\leftmargin}{\rightmargin} + \addtolength{\leftmargin}{\labelwidth} + \addtolength{\leftmargin}{\labelsep} + \renewcommand{\makelabel}{\optionlistlabel}} +}{\end{list}} + +\newlength{\lineblockindentation} +\setlength{\lineblockindentation}{2.5em} +\newenvironment{lineblock}[1] +{\begin{list}{} + {\setlength{\partopsep}{\parskip} + \addtolength{\partopsep}{\baselineskip} + \topsep0pt\itemsep0.15\baselineskip\parsep0pt + \leftmargin#1} + \raggedright} +{\end{list}} + +% Re-define \includegraphics to resize images larger than the line width +% if the size is not specified. +% Warning: future version of Sphinx will not modify original \includegraphics, +% Below custom code will be direct definition of \sphinxincludegraphics, with +% \py@Oldincludegraphics replaced by direct use of original \includegraphics. +\let\py@Oldincludegraphics\includegraphics +\newbox\spx@image@box +\renewcommand*{\includegraphics}[2][\@empty]{% + \ifx\@empty #1% attention, #1 could be bb.., bad if first after \ifx + \setbox\spx@image@box=\hbox{\py@Oldincludegraphics{#2}}% + \ifdim \wd\spx@image@box>\linewidth + \py@Oldincludegraphics[width=\linewidth]{#2}% + \else + \leavevmode\box\spx@image@box + \fi + \else + \py@Oldincludegraphics[#1]{#2}% + \fi +} +% Writer will put \sphinxincludegraphics in LaTeX source, and with this, +% documents which used their own modified \includegraphics will compile +% as before. But see warning above. +\newcommand*{\sphinxincludegraphics}{\includegraphics} + +% to make pdf with correct encoded bookmarks in Japanese +% this should precede the hyperref package +\ifx\kanjiskip\undefined +% for non-Japanese: make sure bookmarks are ok also with lualatex + \PassOptionsToPackage{pdfencoding=unicode}{hyperref} +\else + \usepackage{atbegshi} + \ifx\ucs\undefined + \ifnum 42146=\euc"A4A2 + \AtBeginShipoutFirst{\special{pdf:tounicode EUC-UCS2}} + \else + \AtBeginShipoutFirst{\special{pdf:tounicode 90ms-RKSJ-UCS2}} + \fi + \else + \AtBeginShipoutFirst{\special{pdf:tounicode UTF8-UCS2}} + \fi +\fi + +% Include hyperref last. +\RequirePackage[colorlinks,breaklinks, + linkcolor=InnerLinkColor,filecolor=OuterLinkColor, + menucolor=OuterLinkColor,urlcolor=OuterLinkColor, + citecolor=InnerLinkColor]{hyperref} +% Fix anchor placement for figures with captions. +% (Note: we don't use a package option here; instead, we give an explicit +% \capstart for figures that actually have a caption.) +\RequirePackage{hypcap} + +% Set up styles of URL: it should be placed after hyperref +\urlstyle{same} + +% From docutils.writers.latex2e +% inline markup (custom roles) +% \DUrole{#1}{#2} tries \DUrole#1{#2} +\providecommand*{\DUrole}[2]{% + \ifcsname DUrole#1\endcsname% + \csname DUrole#1\endcsname{#2}% + \else% backwards compatibility: try \docutilsrole#1{#2} + \ifcsname docutilsrole#1\endcsname% + \csname docutilsrole#1\endcsname{#2}% + \else% + #2% + \fi% + \fi% +} + +\providecommand*{\DUprovidelength}[2]{% + \ifdefined#1\else\newlength{#1}\setlength{#1}{#2}\fi +} + +\DUprovidelength{\DUlineblockindent}{2.5em} +\ifdefined\DUlineblock\else + \newenvironment{DUlineblock}[1]{% + \list{}{\setlength{\partopsep}{\parskip} + \addtolength{\partopsep}{\baselineskip} + \setlength{\topsep}{0pt} + \setlength{\itemsep}{0.15\baselineskip} + \setlength{\parsep}{0pt} + \setlength{\leftmargin}{#1}} + \raggedright + } + {\endlist} +\fi + +% From footmisc.sty: allows footnotes in titles +\let\FN@sf@@footnote\footnote +\def\footnote{\ifx\protect\@typeset@protect + \expandafter\FN@sf@@footnote + \else + \expandafter\FN@sf@gobble@opt + \fi +} +\edef\FN@sf@gobble@opt{\noexpand\protect + \expandafter\noexpand\csname FN@sf@gobble@opt \endcsname} +\expandafter\def\csname FN@sf@gobble@opt \endcsname{% + \@ifnextchar[%] + \FN@sf@gobble@twobracket + \@gobble +} +\def\FN@sf@gobble@twobracket[#1]#2{} + +% adjust the margins for footer, +% this works with the jsclasses only (Japanese standard document classes) +\ifx\@jsc@uplatextrue\undefined\else + \hypersetup{setpagesize=false} + \setlength\footskip{2\baselineskip} + \addtolength{\textheight}{-2\baselineskip} +\fi + +% fix the double index and bibliography on the table of contents +% in jsclasses (Japanese standard document classes) +\ifx\@jsc@uplatextrue\undefined\else + \renewcommand{\theindex}{ + \cleardoublepage + \phantomsection + \py@OldTheindex + } + \renewcommand{\thebibliography}[1]{ + \cleardoublepage + \phantomsection + \py@OldThebibliography{1} + } +\fi + +% disable \@chappos in Appendix in pTeX +\ifx\kanjiskip\undefined\else + \let\py@OldAppendix=\appendix + \renewcommand{\appendix}{ + \py@OldAppendix + \gdef\@chappos{} + } +\fi + +% Define literal-block environment +\RequirePackage{newfloat} +\DeclareFloatingEnvironment{literal-block} +\spx@ifundefined{c@chapter} + {\SetupFloatingEnvironment{literal-block}{within=section,placement=h}} + {\SetupFloatingEnvironment{literal-block}{within=chapter,placement=h}} +\SetupFloatingEnvironment{literal-block}{name=List} +% control caption around literal-block +\RequirePackage{capt-of} +\RequirePackage{needspace} +% if the left page space is less than \literalblockneedspace, insert page-break +\newcommand{\sphinxliteralblockneedspace}{5\baselineskip} +\newcommand{\sphinxliteralblockwithoutcaptionneedspace}{1.5\baselineskip} + +% figure in table +\newenvironment{sphinxfigure-in-table}[1][\linewidth]{% + \def\@captype{figure}% + \begin{minipage}{#1}% +}{\end{minipage}} +% store original \caption macro for use with figures in longtable and tabulary +\AtBeginDocument{\let\spx@originalcaption\caption} +\newcommand*\sphinxfigcaption + {\ifx\equation$%$% this is trick to identify tabulary first pass + \firstchoice@false\else\firstchoice@true\fi + \spx@originalcaption } + +% by default, also define macros with the no-prefix names +\ifsphinxKeepOldNames + \typeout{** (sphinx) defining (legacy) text style macros without \string\sphinx\space prefix} + \typeout{** if clashes with packages, set latex_keep_old_macro_names=False in conf.py} + \@for\@tempa:=strong,bfcode,email,tablecontinued,titleref,% + menuselection,accelerator,crossref,termref,optional\do +{% first, check if command with no prefix already exists + \expandafter\newcommand\csname\@tempa\endcsname{}% + % if no error give it the meaning defined so far with \sphinx prefix + \expandafter\let\csname\@tempa\expandafter\endcsname + \csname sphinx\@tempa\endcsname + % redefine the \sphinx prefixed macro to expand to non-prefixed one + \expandafter\def\csname sphinx\@tempa\expandafter\endcsname + \expandafter{\csname\@tempa\endcsname}% +} + % robustified case needs special treatment + \newcommand\code{}\let\code\relax + \DeclareRobustCommand{\code}[1]{{\@noligs\scantokens{\texttt{#1}\relax}}} + \def\sphinxcode{\code}% +\fi diff --git a/docs/_build/latex/sphinxhowto.cls b/docs/_build/latex/sphinxhowto.cls new file mode 100644 index 0000000000000000000000000000000000000000..8d5c59232b7043ac8eae052e604e260148c6b381 --- /dev/null +++ b/docs/_build/latex/sphinxhowto.cls @@ -0,0 +1,111 @@ +% +% sphinxhowto.cls for Sphinx (http://sphinx-doc.org/) +% + +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{sphinxhowto}[2009/06/02 Document class (Sphinx HOWTO)] + +\ifx\directlua\undefined\else +% if compiling with lualatex 0.85 or later load compatibility patch issued by +% the LaTeX team for older packages relying on \pdf<name> named primitives. + \IfFileExists{luatex85.sty}{\RequirePackage{luatex85}}{} +\fi + +% 'oneside' option overriding the 'twoside' default +\newif\if@oneside +\DeclareOption{oneside}{\@onesidetrue} +% Pass remaining document options to the parent class. +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\sphinxdocclass}} +\ProcessOptions\relax + +% Default to two-side document +\if@oneside +% nothing to do (oneside is the default) +\else +\PassOptionsToClass{twoside}{\sphinxdocclass} +\fi + +\LoadClass{\sphinxdocclass} + +% Set some sane defaults for section numbering depth and TOC depth. You can +% reset these counters in your preamble. +% +\setcounter{secnumdepth}{2} + +% Change the title page to look a bit better, and fit in with the fncychap +% ``Bjarne'' style a bit better. +% +\renewcommand{\maketitle}{% + \noindent\rule{\textwidth}{1pt}\ifsphinxpdfoutput\newline\null\fi\par + \ifsphinxpdfoutput + \begingroup + % These \defs are required to deal with multi-line authors; it + % changes \\ to ', ' (comma-space), making it pass muster for + % generating document info in the PDF file. + \def\\{, }% + \def\and{and }% + \pdfinfo{ + /Author (\@author) + /Title (\@title) + }% + \endgroup + \fi + \begin{flushright} + \sphinxlogo + \py@HeaderFamily + {\Huge \@title }\par + {\itshape\large \py@release \releaseinfo}\par + \vspace{25pt} + {\Large + \begin{tabular}[t]{c} + \@author + \end{tabular}}\par + \vspace{25pt} + \@date \par + \py@authoraddress \par + \end{flushright} + \@thanks + \setcounter{footnote}{0} + \let\thanks\relax\let\maketitle\relax + %\gdef\@thanks{}\gdef\@author{}\gdef\@title{} +} + +\let\py@OldTableofcontents=\tableofcontents +\renewcommand{\tableofcontents}{ + \begingroup + \parskip = 0mm + \py@OldTableofcontents + \endgroup + \rule{\textwidth}{1pt} + \vspace{12pt} +} + +\@ifundefined{fancyhf}{ + \pagestyle{plain}}{ + \pagestyle{normal}} % start this way; change for +\pagenumbering{arabic} % ToC & chapters + +\thispagestyle{empty} + +% Fix the bibliography environment to add an entry to the Table of +% Contents. +% For an article document class this environment is a section, +% so no page break before it. +\let\py@OldThebibliography=\thebibliography +\renewcommand{\thebibliography}[1]{ + \phantomsection + \py@OldThebibliography{1} + \addcontentsline{toc}{section}{\bibname} +} + +% Same for the indices. +% The memoir class already does this, so we don't duplicate it in that case. +% +\@ifclassloaded{memoir}{}{ + \let\py@OldTheindex=\theindex + \renewcommand{\theindex}{ + \phantomsection + \py@OldTheindex + \addcontentsline{toc}{section}{\indexname} + } +} diff --git a/docs/_build/latex/sphinxmanual.cls b/docs/_build/latex/sphinxmanual.cls new file mode 100644 index 0000000000000000000000000000000000000000..f204494496c6bc14965fec9974e420cf9b553f5f --- /dev/null +++ b/docs/_build/latex/sphinxmanual.cls @@ -0,0 +1,130 @@ +% +% sphinxmanual.cls for Sphinx (http://sphinx-doc.org/) +% + +\NeedsTeXFormat{LaTeX2e}[1995/12/01] +\ProvidesClass{sphinxmanual}[2009/06/02 Document class (Sphinx manual)] + +\ifx\directlua\undefined\else +% if compiling with lualatex 0.85 or later load compatibility patch issued by +% the LaTeX team for older packages relying on \pdf<name> named primitives. + \IfFileExists{luatex85.sty}{\RequirePackage{luatex85}}{} +\fi + +% chapters starting at odd pages (overridden by 'openany' document option) +\PassOptionsToClass{openright}{\sphinxdocclass} + +% 'oneside' option overriding the 'twoside' default +\newif\if@oneside +\DeclareOption{oneside}{\@onesidetrue} +% Pass remaining document options to the parent class. +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\sphinxdocclass}} +\ProcessOptions\relax + +% Defaults two-side document +\if@oneside +% nothing to do (oneside is the default) +\else +\PassOptionsToClass{twoside}{\sphinxdocclass} +\fi + +\LoadClass{\sphinxdocclass} + +% Set some sane defaults for section numbering depth and TOC depth. You can +% reset these counters in your preamble. +% +\setcounter{secnumdepth}{2} +\setcounter{tocdepth}{1} + +% Change the title page to look a bit better, and fit in with the fncychap +% ``Bjarne'' style a bit better. +% +\renewcommand{\maketitle}{% + \begin{titlepage}% + \let\footnotesize\small + \let\footnoterule\relax + \noindent\rule{\textwidth}{1pt}\ifsphinxpdfoutput\newline\null\fi\par + \ifsphinxpdfoutput + \begingroup + % These \defs are required to deal with multi-line authors; it + % changes \\ to ', ' (comma-space), making it pass muster for + % generating document info in the PDF file. + \def\\{, }% + \def\and{and }% + \pdfinfo{ + /Author (\@author) + /Title (\@title) + }% + \endgroup + \fi + \begin{flushright}% + \sphinxlogo + \py@HeaderFamily + {\Huge \@title \par} + {\itshape\LARGE \py@release\releaseinfo \par} + \vfill + {\LARGE + \begin{tabular}[t]{c} + \@author + \end{tabular} + \par} + \vfill\vfill + {\large + \@date \par + \vfill + \py@authoraddress \par + }% + \end{flushright}%\par + \@thanks + \end{titlepage}% + \setcounter{footnote}{0}% + \let\thanks\relax\let\maketitle\relax + %\gdef\@thanks{}\gdef\@author{}\gdef\@title{} +} + +\let\py@OldTableofcontents=\tableofcontents +\renewcommand{\tableofcontents}{% + % before resetting page counter, let's do the right thing. + \if@openright\cleardoublepage\else\clearpage\fi + \pagenumbering{roman}% + \pagestyle{plain}% + \begingroup + \parskip \z@skip + \py@OldTableofcontents + \endgroup + % before resetting page counter, let's do the right thing. + \if@openright\cleardoublepage\else\clearpage\fi + \pagenumbering{arabic}% + \ifdefined\fancyhf\pagestyle{normal}\fi +} +\pagenumbering{alph}% avoid hyperref "duplicate destination" warnings + +% This is needed to get the width of the section # area wide enough in the +% library reference. Doing it here keeps it the same for all the manuals. +% +\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.6em}} +\renewcommand*\l@subsection{\@dottedtocline{2}{4.1em}{3.5em}} + +% Fix the bibliography environment to add an entry to the Table of +% Contents. +% For a report document class this environment is a chapter. +\let\py@OldThebibliography=\thebibliography +\renewcommand{\thebibliography}[1]{ + \if@openright\cleardoublepage\else\clearpage\fi + \phantomsection + \py@OldThebibliography{1} + \addcontentsline{toc}{chapter}{\bibname} +} + +% Same for the indices. +% The memoir class already does this, so we don't duplicate it in that case. +% +\@ifclassloaded{memoir}{}{ + \let\py@OldTheindex=\theindex + \renewcommand{\theindex}{ + \if@openright\cleardoublepage\else\clearpage\fi + \phantomsection + \py@OldTheindex + \addcontentsline{toc}{chapter}{\indexname} + } +} diff --git a/docs/_build/latex/tabulary.sty b/docs/_build/latex/tabulary.sty new file mode 100644 index 0000000000000000000000000000000000000000..11fdf7428c82a5cabe9626fd10926bbfe82e2904 --- /dev/null +++ b/docs/_build/latex/tabulary.sty @@ -0,0 +1,452 @@ +%% +%% This is file `tabulary.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tabulary.dtx (with options: `package') +%% DRAFT VERSION +%% +%% File `tabulary.dtx'. +%% Copyright (C) 1995 1996 2003 2008 David Carlisle +%% This file may be distributed under the terms of the LPPL. +%% See 00readme.txt for details. +%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{tabulary} + [2008/12/01 v0.9 tabulary package (DPC)] +\RequirePackage{array} +\catcode`\Z=14 +\DeclareOption{debugshow}{\catcode`\Z=9\relax} +\ProcessOptions +\def\arraybackslash{\let\\=\@arraycr} +\def\@finalstrut#1{% + \unskip\ifhmode\nobreak\fi\vrule\@width\z@\@height\z@\@depth\dp#1} +\newcount\TY@count +\def\tabulary{% + \let\TY@final\tabular + \let\endTY@final\endtabular + \TY@tabular} +\def\TY@tabular#1{% + \edef\TY@{\@currenvir}% + {\ifnum0=`}\fi + \@ovxx\TY@linewidth + \@ovyy\TY@tablewidth + \count@\z@ + \@tempswatrue + \@whilesw\if@tempswa\fi{% + \advance\count@\@ne + \expandafter\ifx\csname TY@F\the\count@\endcsname\relax + \@tempswafalse + \else + \expandafter\let\csname TY@SF\the\count@\expandafter\endcsname + \csname TY@F\the\count@\endcsname + \global\expandafter\let\csname TY@F\the\count@\endcsname\relax + \expandafter\let\csname TY@S\the\count@\expandafter\endcsname + \csname TY@\the\count@\endcsname + \fi}% + \global\TY@count\@ne + \TY@width\xdef{0pt}% + \global\TY@tablewidth\z@ + \global\TY@linewidth#1\relax +Z\message{^^J^^JTable^^J% +Z Target Width: \the\TY@linewidth^^J% +Z \string\tabcolsep: \the\tabcolsep\space +Z \string\arrayrulewidth: \the\arrayrulewidth\space +Z \string\doublerulesep: \the\doublerulesep^^J% +Z \string\tymin: \the\tymin\space +Z \string\tymax: \the\tymax^^J}% + \let\@classz\TY@classz + \let\verb\TX@verb + \toks@{}\TY@get@body} +\let\TY@@mkpream\@mkpream +\def\TY@mkpream{% + \def\@addamp{% + \if@firstamp \@firstampfalse \else + \global\advance\TY@count\@ne + \edef\@preamble{\@preamble &}\fi + \TY@width\xdef{0pt}}% + \def\@acol{% + \TY@subwidth\col@sep + \@addtopreamble{\hskip\col@sep}}% + \let\@arrayrule\TY@arrayrule + \let\@classvi\TY@classvi + \def\@classv{\save@decl + \expandafter\NC@ecs\@nextchar\extracolsep{}\extracolsep\@@@ + \sbox\z@{\d@llarbegin\@nextchar\d@llarend}% + \TY@subwidth{\wd\z@}% + \@addtopreamble{\d@llarbegin\the@toks\the\count@\relax\d@llarend}% + \prepnext@tok}% + \global\let\@mkpream\TY@@mkpream + \TY@@mkpream} +\def\TY@arrayrule{% + \TY@subwidth\arrayrulewidth + \@addtopreamble \vline} +\def\TY@classvi{\ifcase \@lastchclass + \@acol \or + \TY@subwidth\doublerulesep + \@addtopreamble{\hskip \doublerulesep}\or + \@acol \or + \@classvii + \fi} +\def\TY@tab{% + \setbox\z@\hbox\bgroup + \let\[$\let\]$% + \let\equation$\let\endequation$% + \col@sep\tabcolsep + \let\d@llarbegin\begingroup\let\d@llarend\endgroup + \let\@mkpream\TY@mkpream + \def\multicolumn##1##2##3{\multispan##1\relax}% + \CT@start\TY@tabarray} +\def\TY@tabarray{\@ifnextchar[{\TY@array}{\@array[t]}} +\def\TY@array[#1]{\@array[t]} +\def\TY@width#1{% + \expandafter#1\csname TY@\the\TY@count\endcsname} +\def\TY@subwidth#1{% + \TY@width\dimen@ + \advance\dimen@-#1\relax + \TY@width\xdef{\the\dimen@}% + \global\advance\TY@linewidth-#1\relax} +\def\endtabulary{% + \gdef\@halignto{}% + \let\TY@footnote\footnote% + \def\footnote{}% prevent footnotes from doing anything + \expandafter\TY@tab\the\toks@ + \crcr\omit + {\xdef\TY@save@row{}% + \loop + \advance\TY@count\m@ne + \ifnum\TY@count>\z@ + \xdef\TY@save@row{\TY@save@row&\omit}% + \repeat}\TY@save@row + \endarray\global\setbox1=\lastbox\setbox0=\vbox{\unvbox1 + \unskip\global\setbox1=\lastbox}\egroup + \dimen@\TY@linewidth + \divide\dimen@\TY@count + \ifdim\dimen@<\tymin + \TY@warn{tymin too large (\the\tymin), resetting to \the\dimen@}% + \tymin\dimen@ + \fi + \setbox\tw@=\hbox{\unhbox\@ne + \loop +\@tempdima=\lastskip +\ifdim\@tempdima>\z@ +Z \message{ecs=\the\@tempdima^^J}% + \global\advance\TY@linewidth-\@tempdima +\fi + \unskip + \setbox\tw@=\lastbox + \ifhbox\tw@ +Z \message{Col \the\TY@count: Initial=\the\wd\tw@\space}% + \ifdim\wd\tw@>\tymax + \wd\tw@\tymax +Z \message{> max\space}% +Z \else +Z \message{ \@spaces\space}% + \fi + \TY@width\dimen@ +Z \message{\the\dimen@\space}% + \advance\dimen@\wd\tw@ +Z \message{Final=\the\dimen@\space}% + \TY@width\xdef{\the\dimen@}% + \ifdim\dimen@<\tymin +Z \message{< tymin}% + \global\advance\TY@linewidth-\dimen@ + \expandafter\xdef\csname TY@F\the\TY@count\endcsname + {\the\dimen@}% + \else + \expandafter\ifx\csname TY@F\the\TY@count\endcsname\z@ +Z \message{***}% + \global\advance\TY@linewidth-\dimen@ + \expandafter\xdef\csname TY@F\the\TY@count\endcsname + {\the\dimen@}% + \else +Z \message{> tymin}% + \global\advance\TY@tablewidth\dimen@ + \global\expandafter\let\csname TY@F\the\TY@count\endcsname + \maxdimen + \fi\fi + \advance\TY@count\m@ne + \repeat}% + \TY@checkmin + \TY@checkmin + \TY@checkmin + \TY@checkmin + \TY@count\z@ + \let\TY@box\TY@box@v + \let\footnote\TY@footnote % restore footnotes + {\expandafter\TY@final\the\toks@\endTY@final}% + \count@\z@ + \@tempswatrue + \@whilesw\if@tempswa\fi{% + \advance\count@\@ne + \expandafter\ifx\csname TY@SF\the\count@\endcsname\relax + \@tempswafalse + \else + \global\expandafter\let\csname TY@F\the\count@\expandafter\endcsname + \csname TY@SF\the\count@\endcsname + \global\expandafter\let\csname TY@\the\count@\expandafter\endcsname + \csname TY@S\the\count@\endcsname + \fi}% + \TY@linewidth\@ovxx + \TY@tablewidth\@ovyy + \ifnum0=`{\fi}} +\def\TY@checkmin{% + \let\TY@checkmin\relax +\ifdim\TY@tablewidth>\z@ + \Gscale@div\TY@ratio\TY@linewidth\TY@tablewidth + \ifdim\TY@tablewidth <\TY@linewidth + \def\TY@ratio{1}% + \fi +\else + \TY@warn{No suitable columns!}% + \def\TY@ratio{1}% +\fi +\count@\z@ +Z \message{^^JLine Width: \the\TY@linewidth, +Z Natural Width: \the\TY@tablewidth, +Z Ratio: \TY@ratio^^J}% +\@tempdima\z@ +\loop +\ifnum\count@<\TY@count +\advance\count@\@ne + \ifdim\csname TY@F\the\count@\endcsname>\tymin + \dimen@\csname TY@\the\count@\endcsname + \dimen@\TY@ratio\dimen@ + \ifdim\dimen@<\tymin +Z \message{Column \the\count@\space ->}% + \global\expandafter\let\csname TY@F\the\count@\endcsname\tymin + \global\advance\TY@linewidth-\tymin + \global\advance\TY@tablewidth-\csname TY@\the\count@\endcsname + \let\TY@checkmin\TY@@checkmin + \else + \expandafter\xdef\csname TY@F\the\count@\endcsname{\the\dimen@}% + \advance\@tempdima\csname TY@F\the\count@\endcsname + \fi + \fi +Z \dimen@\csname TY@F\the\count@\endcsname\message{\the\dimen@, }% +\repeat +Z \message{^^JTotal:\the\@tempdima^^J}% +} +\let\TY@@checkmin\TY@checkmin +\newdimen\TY@linewidth +\def\tyformat{\everypar{{\nobreak\hskip\z@skip}}} +\newdimen\tymin +\tymin=10pt +\newdimen\tymax +\tymax=2\textwidth +\def\@testpach{\@chclass + \ifnum \@lastchclass=6 \@ne \@chnum \@ne \else + \ifnum \@lastchclass=7 5 \else + \ifnum \@lastchclass=8 \tw@ \else + \ifnum \@lastchclass=9 \thr@@ + \else \z@ + \ifnum \@lastchclass = 10 \else + \edef\@nextchar{\expandafter\string\@nextchar}% + \@chnum + \if \@nextchar c\z@ \else + \if \@nextchar l\@ne \else + \if \@nextchar r\tw@ \else + \if \@nextchar C7 \else + \if \@nextchar L8 \else + \if \@nextchar R9 \else + \if \@nextchar J10 \else + \z@ \@chclass + \if\@nextchar |\@ne \else + \if \@nextchar !6 \else + \if \@nextchar @7 \else + \if \@nextchar <8 \else + \if \@nextchar >9 \else + 10 + \@chnum + \if \@nextchar m\thr@@\else + \if \@nextchar p4 \else + \if \@nextchar b5 \else + \z@ \@chclass \z@ \@preamerr \z@ \fi \fi \fi \fi\fi \fi \fi\fi \fi + \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi} +\def\TY@classz{% + \@classx + \@tempcnta\count@ + \ifx\TY@box\TY@box@v + \global\advance\TY@count\@ne + \fi + \let\centering c% + \let\raggedright\noindent + \let\raggedleft\indent + \let\arraybackslash\relax + \prepnext@tok + \ifnum\@chnum<4 + \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@ + \fi + \ifnum\@chnum=6 + \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@ + \fi + \@addtopreamble{% + \ifcase\@chnum + \hfil \d@llarbegin\insert@column\d@llarend \hfil \or + \kern\z@ + \d@llarbegin \insert@column \d@llarend \hfil \or + \hfil\kern\z@ \d@llarbegin \insert@column \d@llarend \or + $\vcenter\@startpbox{\@nextchar}\insert@column \@endpbox $\or + \vtop \@startpbox{\@nextchar}\insert@column \@endpbox \or + \vbox \@startpbox{\@nextchar}\insert@column \@endpbox \or + \d@llarbegin \insert@column \d@llarend \or% dubious "s" case + \TY@box\centering\or + \TY@box\raggedright\or + \TY@box\raggedleft\or + \TY@box\relax + \fi}\prepnext@tok} +\def\TY@box#1{% + \ifx\centering#1% + \hfil \d@llarbegin\insert@column\d@llarend \hfil \else + \ifx\raggedright#1% + \kern\z@%<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + \d@llarbegin \insert@column \d@llarend \hfil \else + \ifx\raggedleft#1% + \hfil\kern\z@ \d@llarbegin \insert@column \d@llarend \else + \ifx\relax#1% + \d@llarbegin \insert@column \d@llarend + \fi \fi \fi \fi} +\def\TY@box@v#1{% + \vtop \@startpbox{\csname TY@F\the\TY@count\endcsname}% + #1\arraybackslash\tyformat + \insert@column\@endpbox} +\newdimen\TY@tablewidth +\def\Gscale@div#1#2#3{% + \setlength\dimen@{#3}% + \ifdim\dimen@=\z@ + \PackageError{graphics}{Division by 0}\@eha + \dimen@#2% + \fi + \edef\@tempd{\the\dimen@}% + \setlength\dimen@{#2}% + \count@65536\relax + \ifdim\dimen@<\z@ + \dimen@-\dimen@ + \count@-\count@ + \fi + \loop + \ifdim\dimen@<8192\p@ + \dimen@\tw@\dimen@ + \divide\count@\tw@ + \repeat + \dimen@ii=\@tempd\relax + \divide\dimen@ii\count@ + \divide\dimen@\dimen@ii + \edef#1{\strip@pt\dimen@}} +\long\def\TY@get@body#1\end + {\toks@\expandafter{\the\toks@#1}\TY@find@end} +\def\TY@find@end#1{% + \def\@tempa{#1}% + \ifx\@tempa\TY@\def\@tempa{\end{#1}}\expandafter\@tempa + \else\toks@\expandafter + {\the\toks@\end{#1}}\expandafter\TY@get@body\fi} +\def\TY@warn{% + \PackageWarning{tabulary}} +\catcode`\Z=11 +\AtBeginDocument{ +\@ifpackageloaded{colortbl}{% +\expandafter\def\expandafter\@mkpream\expandafter#\expandafter1% + \expandafter{% + \expandafter\let\expandafter\CT@setup\expandafter\relax + \expandafter\let\expandafter\CT@color\expandafter\relax + \expandafter\let\expandafter\CT@do@color\expandafter\relax + \expandafter\let\expandafter\color\expandafter\relax + \expandafter\let\expandafter\CT@column@color\expandafter\relax + \expandafter\let\expandafter\CT@row@color\expandafter\relax + \@mkpream{#1}} +\let\TY@@mkpream\@mkpream +\def\TY@classz{% + \@classx + \@tempcnta\count@ + \ifx\TY@box\TY@box@v + \global\advance\TY@count\@ne + \fi + \let\centering c% + \let\raggedright\noindent + \let\raggedleft\indent + \let\arraybackslash\relax + \prepnext@tok +\expandafter\CT@extract\the\toks\@tempcnta\columncolor!\@nil + \ifnum\@chnum<4 + \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@ + \fi + \ifnum\@chnum=6 + \global\expandafter\let\csname TY@F\the\TY@count\endcsname\z@ + \fi + \@addtopreamble{% + \setbox\z@\hbox\bgroup\bgroup + \ifcase\@chnum + \hskip\stretch{.5}\kern\z@ + \d@llarbegin\insert@column\d@llarend\hskip\stretch{.5}\or + \kern\z@%<<<<<<<<<<<<<<<<<<<<<<<<<<< + \d@llarbegin \insert@column \d@llarend \hfill \or + \hfill\kern\z@ \d@llarbegin \insert@column \d@llarend \or + $\vcenter\@startpbox{\@nextchar}\insert@column \@endpbox $\or + \vtop \@startpbox{\@nextchar}\insert@column \@endpbox \or + \vbox \@startpbox{\@nextchar}\insert@column \@endpbox \or + \d@llarbegin \insert@column \d@llarend \or% dubious s case + \TY@box\centering\or + \TY@box\raggedright\or + \TY@box\raggedleft\or + \TY@box\relax + \fi + \egroup\egroup +\begingroup + \CT@setup + \CT@column@color + \CT@row@color + \CT@do@color +\endgroup + \@tempdima\ht\z@ + \advance\@tempdima\minrowclearance + \vrule\@height\@tempdima\@width\z@ +\unhbox\z@ +}\prepnext@tok}% + \def\TY@arrayrule{% + \TY@subwidth\arrayrulewidth + \@addtopreamble{{\CT@arc@\vline}}}% + \def\TY@classvi{\ifcase \@lastchclass + \@acol \or + \TY@subwidth\doublerulesep + \ifx\CT@drsc@\relax + \@addtopreamble{\hskip\doublerulesep}% + \else + \@addtopreamble{{\CT@drsc@\vrule\@width\doublerulesep}}% + \fi\or + \@acol \or + \@classvii + \fi}% +}{% +\let\CT@start\relax +} +} +{\uccode`\*=`\ % +\uppercase{\gdef\TX@verb{% + \leavevmode\null\TX@vwarn + {\ifnum0=`}\fi\ttfamily\let\\\ignorespaces + \@ifstar{\let~*\TX@vb}{\TX@vb}}}} +\def\TX@vb#1{\def\@tempa##1#1{\toks@{##1}\edef\@tempa{\the\toks@}% + \expandafter\TX@v\meaning\@tempa\\ \\\ifnum0=`{\fi}}\@tempa!} +\def\TX@v#1!{\afterassignment\TX@vfirst\let\@tempa= } +\begingroup +\catcode`\*=\catcode`\# +\catcode`\#=12 +\gdef\TX@vfirst{% + \if\@tempa#% + \def\@tempb{\TX@v@#}% + \else + \let\@tempb\TX@v@ + \if\@tempa\space~\else\@tempa\fi + \fi + \@tempb} +\gdef\TX@v@*1 *2{% + \TX@v@hash*1##\relax\if*2\\\else~\expandafter\TX@v@\fi*2} +\gdef\TX@v@hash*1##*2{*1\ifx*2\relax\else#\expandafter\TX@v@hash\fi*2} +\endgroup +\def\TX@vwarn{% + \@warning{\noexpand\verb may be unreliable inside tabularx/y}% + \global\let\TX@vwarn\@empty} +\endinput +%% +%% End of file `tabulary.sty'. diff --git a/source/EV3.m b/source/EV3.m index 29aeda84acbb2c7d4f03abd06626ad0690fd095f..851a4fab8e2320507139ebadcebad9c29136e653 100755 --- a/source/EV3.m +++ b/source/EV3.m @@ -8,41 +8,45 @@ classdef EV3 < MaskedHandle % Notes: % * Creating multiple EV3 objects and connecting them to different physical bricks has not % been thoroughly tested yet, but seems to work on a first glance. + % * When an input argument of a method is marked as optional, the argument needs to be + % 'announced' by a preceding 2nd argument, which is a string containing the name of the argument. + % For example, Motor.setProperties may be given a power-parameter. The syntax would be as + % follows: *brickObject.motorA.setProperties('power', 50);* + % % % % Attributes: - % motorA (Motor): Motor-object interfacing port A - % motorB (Motor): Motor-object interfacing port B - % motorC (Motor): Motor-object interfacing port C - % motorD (Motor): Motor-object interfacing port D - % sensor1 (Sensor): Motor-object interfacing port 1 - % sensor2 (Sensor): Motor-object interfacing port 2 - % sensor3 (Sensor): Motor-object interfacing port 3 - % sensor4 (Sensor): Motor-object interfacing port 4 + % motorA (Motor): Motor-object interfacing port A. See also :class:`Motor`. + % motorB (Motor): Motor-object interfacing port B. See also :class:`Motor`. + % motorC (Motor): Motor-object interfacing port C. See also :class:`Motor`. + % motorD (Motor): Motor-object interfacing port D. See also :class:`Motor`. + % sensor1 (Sensor): Motor-object interfacing port 1. See also :class:`Sensor`. + % sensor2 (Sensor): Motor-object interfacing port 2. See also :class:`Sensor`. + % sensor3 (Sensor): Motor-object interfacing port 3. See also :class:`Sensor`. + % sensor4 (Sensor): Motor-object interfacing port 4. See also :class:`Sensor`. % debug (numeric in {0,1,2}): Debug mode. *[WRITABLE]* % % - 0: Debug turned off % - 1: Debug turned on for EV3-object -> enables feedback in the console about what firmware-commands have been called when using a method % - 2: Low-level-Debug turned on -> each packet sent and received is printed to the console % - % batteryMode (string in {'Percentage', 'Voltage'}): Mode for reading battery charge. - % *[WRITABLE]* - % batteryValue (numeric): Current battery charge. Depending on batteryMode, the reading - % is either in percentage or voltage. *[READ-ONLY]* + % batteryMode (string in {'Percentage', 'Voltage'}): Mode for reading battery charge. See also :attr:`batteryValue`. *[WRITABLE]* + % batteryValue (numeric): Current battery charge. Depending on batteryMode, the reading is either in percentage or voltage. See also :attr:`batteryMode`. *[READ-ONLY]* % isConnected (bool): True if virtual brick-object is connected to physical one. *[READ-ONLY]* % % - % Examples: - % b = EV3(); |br| - % b.connect('usb'); |br| - % ma = b.motorA; |br| - % ma.setProperties('power', 50, 'limitValue', 720); |br| - % ma.start(); |br| + % Example: + % % This example expects a motor at port A and a (random) sensor at port 1 |br| + % b = EV3(); % |br| + % b.connect('usb'); % |br| + % ma = b.motorA; % |br| + % ma.setProperties('power', 50, 'limitValue', 720); % |br| + % ma.start(); % |br| % % fun |br| - % b.sensor1.value |br| - % b.waitFor(); |br| - % b.beep(); |br| - % delete b; |br| + % ma.waitFor(); % |br| + % disp(b.sensor1.value); % |br| + % b.beep(); % |br| + % delete b; % |br| properties % batteryMode (string in {'Percentage', 'Voltage'}): Mode for reading battery charge. [WRITABLE] @@ -67,32 +71,31 @@ classdef EV3 < MaskedHandle properties (SetAccess = private) % Read-only properties that are set internally % isConnected (bool): True if virtual brick-object is connected to physical one. [READ-ONLY] - % See also EV3.CONNECT, EV3.DISCONNECT isConnected = false; - % motorA (Motor): Motor-object interfacing port A + % motorA (Motor): Motor-object interfacing port A. % See also MOTOR motorA; - % motorB (Motor): Motor-object interfacing port B + % motorB (Motor): Motor-object interfacing port B. % See also MOTOR motorB; - % motorC (Motor): Motor-object interfacing port C + % motorC (Motor): Motor-object interfacing port C. % See also MOTOR motorC; - % motorD (Motor): Motor-object interfacing port D + % motorD (Motor): Motor-object interfacing port D. % See also MOTOR motorD; - % sensor1 (Sensor): Sensor-object interfacing port 1 + % sensor1 (Sensor): Sensor-object interfacing port 1. % See also SENSOR sensor1; - % sensor2 (Sensor): Sensor-object interfacing port 2 + % sensor2 (Sensor): Sensor-object interfacing port 2. % See also SENSOR sensor2; - % sensor3 (Sensor): Sensor-object interfacing port 3 + % sensor3 (Sensor): Sensor-object interfacing port 3. % See also SENSOR sensor3; - % sensor4 (Sensor): Sensor-object interfacing port 4 + % sensor4 (Sensor): Sensor-object interfacing port 4. % See also SENSOR sensor4; end @@ -116,9 +119,9 @@ classdef EV3 < MaskedHandle % parameters. % % Arguments - % varargin: see setProperties(ev3, varargin) + % varargin: see setProperties(ev3, varargin). % - % See also SETPROPERTIES + % See also SETPROPERTIES / :meth:`setProperties(ev3, varargin)` ev3.setProperties(varargin{:}); @@ -137,7 +140,7 @@ classdef EV3 < MaskedHandle end function delete(ev3) - % Disconnects from physical brick and deletes this instance + % Disconnects from physical brick and deletes this instance. if ev3.isConnected ev3.disconnect(); @@ -151,19 +154,19 @@ classdef EV3 < MaskedHandle % Arguments: % connectionType (string in {'bt', 'usb'}): Connection type % serPort (string in {'/dev/rfcomm1', '/dev/rfcomm2', ...}): Path to serial port - % (if 'bt') - % beep (bool): If true, EV3 beeps if connection has been established + % (necessary if connectionType is 'bt'). *[OPTIONAL]* + % beep (bool): If true, EV3 beeps if connection has been established. *[OPTIONAL]* % - % Examples: + % Example: % % Setup bluetooth connection via com-port 0 |br| - % b = EV3(); |br| - % b.connect('bt', 'serPort', '/dev/rfcomm0'); |br| + % b = EV3(); % |br| + % b.connect('bt', 'serPort', '/dev/rfcomm0'); % |br| % % Setup usb connection, beep when connection has been established - % b = EV3(); |br| - % b.connect('usb', 'beep', 'on', ); |br| + % b = EV3(); % |br| + % b.connect('usb', 'beep', 'on', ); % |br| % + % See also ISCONNECTED / :attr:`isConnected` - % Check connection if ev3.isConnected if isCommInterfaceValid(ev3.commInterface) error('EV3::connect: Already connected.'); @@ -233,12 +236,11 @@ classdef EV3 < MaskedHandle % * Gets called automatically when EV3-object is destroyed. % % Example: - % b = EV3(); - % b.connect('bt', 'serPort', '/dev/rfcomm0'); - % % do stuff - % b.disconnect(); + % b = EV3(); % |br| + % b.connect('bt', 'serPort', '/dev/rfcomm0'); % |br| + % % do stuff |br| + % b.disconnect(); % |br| - % Reset motors and sensors before disconnecting ev3.resetPhysicalBrick(); % Disconnect motors and sensors @@ -264,10 +266,10 @@ classdef EV3 < MaskedHandle %% Device functions function stopAllMotors(ev3) - % Sends a stop-command to all motor-ports + % Sends a stop-command to all motor-ports. if ~ev3.isConnected - stopAllMotors(['EV3::beep: Brick-Object not connected physical brick. ',... + error(['EV3::stopAllMotors: Brick-Object not connected physical brick. ',... 'You have to call ev3.connect(...) first!']); end @@ -279,12 +281,12 @@ classdef EV3 < MaskedHandle % Plays a 'beep'-tone on brick. % % Notes: - % * This equals playTone(10, 1000, 100) (Wraps the same opCode in comm-layer) + % * This equals playTone(10, 1000, 100). % % Example: - % b = EV3(); |br| - % b.connect('bt', 'serPort', '/dev/rfcomm0'); |br| - % b.beep(); |br| + % b = EV3(); % |br| + % b.connect('bt', 'serPort', '/dev/rfcomm0'); % |br| + % b.beep(); % |br| % if ~ev3.isConnected @@ -308,8 +310,8 @@ classdef EV3 < MaskedHandle % duration (numeric >0): in milliseconds % % Example: - % b = EV3(); |br| - % b.connect('bt', 'serPort', '/dev/rfcomm0'); |br| + % b = EV3(); % |br| + % b.connect('bt', 'serPort', '/dev/rfcomm0'); % |br| % b.playTone(40, 5000, 1000); % Plays tone with 40% volume and 5000Hz for 1 % second. |br| % @@ -327,11 +329,11 @@ classdef EV3 < MaskedHandle end function stopTone(ev3) - % Stops tone currently played + % Stops tone currently played. % % Example: - % b = EV3(); |br| - % b.connect('bt', 'serPort', '/dev/rfcomm0'); |br| + % b = EV3(); % |br| + % b.connect('bt', 'serPort', '/dev/rfcomm0'); % |br| % b.playTone(10,100,100000000); % Accidentally given wrong tone duration :) |br| % b.stopTone(); % Stops tone immediately. |br| % @@ -355,11 +357,11 @@ classdef EV3 < MaskedHandle % status (bool): True if a tone is being played % % Example - % b = EV3(); |br| - % b.connect('bt', 'serPort', '/dev/rfcomm0'); |br| - % b.playTone(10, 100, 1000); |br| - % pause(0.5); |br| - % b.tonePlayed() -> Outputs 1 to console. |br| + % b = EV3(); % |br| + % b.connect('bt', 'serPort', '/dev/rfcomm0'); % |br| + % b.playTone(10, 100, 1000); % |br| + % pause(0.5); % Small pause is necessary as tone does not start instantaneously |br| + % b.tonePlayed(); % -> Outputs 1 to console. |br| % if ~ev3.isConnected @@ -378,18 +380,18 @@ classdef EV3 < MaskedHandle function set.commInterface(ev3, comm) if ~isCommInterfaceValid(comm) error('EV3::set.commInterface: Handle to Brick-object not valid.'); - else - ev3.commInterface = comm; end + + ev3.commInterface = comm; end function set.batteryMode(ev3, batteryMode) validModes = {'Voltage', 'Percentage'}; if ~ischar(batteryMode) || ~ismember(batteryMode, validModes) error('EV3::set.batteryMode: Given parameter is not a valid battery mode.'); - else - ev3.batteryMode = batteryMode; end + + ev3.batteryMode = batteryMode; end function set.debug(ev3, debug) @@ -412,12 +414,12 @@ classdef EV3 < MaskedHandle % batteryMode (string in {'Voltage'/'Percentage'}): see EV3.batteryMode *[OPTIONAL]* % % Example: - % b = EV3(); |br| - % b.connect('bt', 'serPort', '/dev/rfcomm0'); |br| - % b.setProperties('debug', 'on', 'batteryMode', 'Voltage'); |br| - % % Instead of: b.debug = 'on'; b.batteryMode = 'Voltage'; |br| + % b = EV3(); % |br| + % b.connect('bt', 'serPort', '/dev/rfcomm0'); % |br| + % b.setProperties('debug', 'on', 'batteryMode', 'Voltage'); % |br| + % % Instead of: b.debug = 'on'; b.batteryMode = 'Voltage'; % |br| % - % See also EV3.DEBUG, EV3.BATTERYMODE + % See also EV3.DEBUG, EV3.BATTERYMODE / :attr:`debug`, :attr:`batteryMode` p = inputParser(); @@ -445,7 +447,7 @@ classdef EV3 < MaskedHandle %% Getter function bat = get.batteryValue(ev3) if ~ev3.isConnected - warning('EV3::getBattery: EV3-Object not connected to physical EV3.'); + warning(ID('noConnection'), 'EV3::getBattery: EV3-Object not connected to physical EV3.'); bat = 0; return; @@ -455,7 +457,7 @@ classdef EV3 < MaskedHandle end function display(ev3) - % Displays EV3-properties and its devices + % Displays EV3-properties and its devices. displayProperties(ev3); @@ -476,10 +478,7 @@ classdef EV3 < MaskedHandle methods (Access = private) % Private brick functions that are wrapped by dependent params function bat = getBattery(ev3) - if ~ev3.isConnected - error(['EV3::getBattery: EV3-Object not connected to physical EV3. You have ',... - 'to call ev3.connect(properties) first!']); - end + % Retrieve batteryValue from brick in current mode. (Wrapped by EV3.batteryValue) if strcmpi(ev3.batteryMode, 'Percentage') bat = ev3.commInterface.uiReadLbatt(); @@ -487,7 +486,7 @@ classdef EV3 < MaskedHandle if ev3.debug fprintf('(DEBUG) EV3::getBattery: Called uiReadLBatt.\n'); end - elseif strcmpi(ev3.batteryMode, 'Voltage') + else bat = ev3.commInterface.uiReadVbatt(); if ev3.debug @@ -497,16 +496,20 @@ classdef EV3 < MaskedHandle end function resetPhysicalBrick(ev3) + % Resets Motors and Sensors. + % + % Notes: + % * Gets called automatically by EV3.delete. + % + % See also MOTOR.RESETPHYSICALMOTOR, SENSOR.RESETPHYSICALSENSOR + sensors = {'sensor1', 'sensor2', 'sensor3', 'sensor4'}; motors = {'motorA', 'motorB', 'motorC', 'motorD'}; for i = 1:4 motor = motors{i}; - ev3.(motor).resetPhysicalMotor(); - end - - for i = 1:4 sensor = sensors{i}; + ev3.(motor).resetPhysicalMotor(); ev3.(sensor).resetPhysicalSensor(); end end diff --git a/source/ID.m b/source/ID.m index b108a1c633f4cf667b31f2c46e37b18fcea9521b..82627073d10d34d3732be224357ed37227b8af15 100755 --- a/source/ID.m +++ b/source/ID.m @@ -1,7 +1,13 @@ -function id = ID() +function id = ID(varargin) % Generates a string that serves as an error-ID for a calling function +% Optionally, a string can be given as argument. It will be appended to the ID. +% Setup constants toolbox = 'RWTHMindstormsEV3'; +appendix = ''; +if nargin > 0 && ischar(varargin{0}) + appendix = [':', varargin{0}]; +end % Get stack trace stackTrace = dbstack(); @@ -22,9 +28,9 @@ functionName = callerList{length(callerList)}; % Create id if length(callerList) > 1 className = callerList{length(callerList)-1}; - id = [toolbox, ':', className, ':', functionName]; + id = [toolbox, ':', className, ':', functionName, appendix]; else - id = [toolbox, ':', functionName]; + id = [toolbox, ':', functionName, appendix]; end end diff --git a/source/Motor.m b/source/Motor.m index 57e0a024b53bd3cc399eee7d2ec32ea3eca8a2ce..c16c29821d1dc8eb29aa8cd50f2c34c01cbe29d2 100755 --- a/source/Motor.m +++ b/source/Motor.m @@ -11,29 +11,33 @@ classdef Motor < MaskedHandle & dynamicprops % * The Motor-class represents motor ports, not individual motors! % * If you start a motor with power=0, the internal state will still be set to % 'isRunning' + % * When an input argument of a method is marked as optional, the argument needs to be + % 'announced' by a preceding 2nd argument, which is a string containing the name of the argument. + % For example, Motor.setProperties may be given a power-parameter. The syntax would be as + % follows: *brickObject.motorA.setProperties('power', 50);* % % Attributes: % power (numeric in [-100, 100]): Power level of motor in percent. *[WRITABLE]* % speedRegulation (bool): Speed regulation turned on or off. When turned on, motor will % try to 'hold' its speed at given power level, whatever the load. In this mode, the % highest possible speed depends on the load and mostly goes up to around 70-80 (at - % this point, the Brick internally input 100% power). When turned off, motor will + % this point, the Brick internally inputs 100% power). When turned off, motor will % constantly input the same power into the motor. The resulting speed will be % somewhat lower, depending on the load. *[WRITABLE]* % smoothStart (numeric s. t. smoothStart+smoothStop < limitValue): Degrees/Time % indicating how far/long the motor should smoothly start. Depending on limitMode, % the input is interpreted either in degrees or milliseconds. The first % {smoothStart}-milliseconds/degrees of limitValue the motor will slowly accelerate - % until reaching its defined speed. *[WRITABLE]* + % until reaching its defined speed. See also :attr:`limitValue`, :attr:`limitMode`. *[WRITABLE]* % smoothStop (numeric s. t. smoothStart+smoothStop < limitValue): Degrees/Time % indicating how far/long the motor should smoothly stop. Depending on limitMode, the % input is interpreted either in degrees or milliseconds. The last % [smoothStop]-milliseconds/degrees of limitValue the motor will slowly slow down - % until it has stopped. *[WRITABLE]* + % until it has stopped. See also :attr:`limitValue`, :attr:`limitMode`. *[WRITABLE]* % limitValue (numeric>=0): Degrees/Time indicating how far/long the motor should run. % Depending on limitMode, the input is interpreted either in degrees or - % milliseconds. *[WRITABLE]* - % limitMode ('Tacho'|'Time'): Mode for motor limit. *[WRITABLE]* + % milliseconds. See also :attr:`limitMode`. *[WRITABLE]* + % limitMode ('Tacho'|'Time'): Mode for motor limit. See also :attr:`limitValue`. *[WRITABLE]* % brakeMode ('Brake'|'Coast'): Action done when stopping. If 'Coast', the motor will (at % tacholimit, if ~=0) coast to a stop. If 'Brake', the motor will stop immediately % (at tacholimit, if ~=0) and hold the brake. *[WRITABLE]* @@ -41,9 +45,9 @@ classdef Motor < MaskedHandle & dynamicprops % the sublayer ('communication layer'), there is feedback in the console about what % command has been called. *[WRITABLE]* % isRunning (bool): True if motor is running. *[READ-ONLY]* - % tachoCount (numeric): Current tacho count. *[READ-ONLY]* + % tachoCount (numeric): Current tacho count in degrees. *[READ-ONLY]* % currentSpeed (numeric): Current speed of motor. If speedRegulation=on this should equal power, - % otherwise it will probably be lower than that. *[READ-ONLY]* + % otherwise it will probably be lower than that. See also :attr:`speedRegulation`. *[READ-ONLY]* % type (DeviceType): Type of connected device if any. *[READ-ONLY]* @@ -54,7 +58,7 @@ classdef Motor < MaskedHandle & dynamicprops % speedRegulation (bool): Speed regulation turned on or off. [WRITABLE] % When turned on, motor will try to 'hold' its speed at given power level, whatever % the load. In this mode, the highest possible speed depends on the load and mostly - % goes up to around 70-80 (at this point, the Brick internally input 100% power). + % goes up to around 70-80 (at this point, the Brick internally inputs 100% power). % When turned off, motor will constantly input the same power into the motor. The % resulting speed will be somewhat lower, depending on the load. speedRegulation; @@ -98,7 +102,7 @@ classdef Motor < MaskedHandle & dynamicprops % isRunning (bool): True if motor is running. [READ-ONLY] isRunning; - % tachoCount (numeric): Current tacho count. [READ-ONLY] + % tachoCount (numeric): Current tacho count in degrees. [READ-ONLY] tachoCount; % currentSpeed (numeric): Current speed of motor. [READ-ONLY] @@ -135,7 +139,7 @@ classdef Motor < MaskedHandle & dynamicprops % connectedToBrick (bool): True if virtual brick is connected to physical brick. connectedToBrick = false; - % state (MotorState): State-struct consisting of several special Motor-flags + % state (MotorState): State-struct consisting of several special Motor-flags . % See also MOTORSTATE state = MotorState(); end @@ -149,7 +153,7 @@ classdef Motor < MaskedHandle & dynamicprops % See also PORTNO portNo; - % portInput (PortInput): Internal number of motor port if accessed via input-opCodes + % portInput (PortInput): Internal number of motor port if accessed via input-opCodes. % - Port 'A': 16 % - Port 'B': 17 % - Port 'C': 18 @@ -157,19 +161,19 @@ classdef Motor < MaskedHandle & dynamicprops % See also PORTINPUT portInput; - % isSynced (bool): True if motor is running in synced mode + % isSynced (bool): True if motor is running in synced mode. isSynced; - % isMaster (bool): True if motor is running in synced mode and has a slave + % isMaster (bool): True if motor is running in synced mode and has a slave. isMaster; - % isSlave (bool): True if motor is running in synced mode and has a master + % isSlave (bool): True if motor is running in synced mode and has a master. isSlave; - % physicalMotorConnected (bool): True if physical motor is connected to this port + % physicalMotorConnected (bool): True if physical motor is connected to this port. physicalMotorConnected; - % internalTachoCount (numeric): internal tacho counter used for positioning the motor with a limit + % internalTachoCount (numeric): internal tacho counter used for positioning the motor with a limit. internalTachoCount; end @@ -178,12 +182,10 @@ classdef Motor < MaskedHandle & dynamicprops function motor = Motor(varargin) % Sets properties of Motor-object and indicates end of init-phase when it's done. % - % Notes: - % * input-arguments will directly be handed to Motor.setProperties - % % Arguments: % varargin: see setProperties(motor, varargin) % + % See also SETPROPERTIES / :meth:`setProperties(ev3, varargin)` motor.setProperties(varargin{:}); motor.init = false; @@ -191,16 +193,8 @@ classdef Motor < MaskedHandle & dynamicprops %% Brick functions function start(motor) - % Starts the motor - % - % Notes: - % * Right now, alternatingly calling this function with and without tacho limit - % may lead to unexpected behaviour. For example, if you run the motor without - % a tacholimit for some time using Coast, then stop using Coast, and then try - % to run the with a tacholimit, it will stop sooner or later than expected, - % or may not even start at all. + % Starts the motor. - % Check connection and if motor is already running if ~motor.connectedToBrick error('Motor::start: Motor-Object not connected to comm handle.'); elseif ~motor.physicalMotorConnected @@ -327,7 +321,14 @@ classdef Motor < MaskedHandle & dynamicprops end function stop(motor) - % Stops the motor + % Stops the motor. + % + % Notes: + % * If this motor has been started synced with another one (either as master or + % slave, using Motor.syncedStart), syncedStop() will be called, stopping both + % motors. + % + % See also MOTOR.START, MOTOR.SYNCEDSTOP / :meth:`start`, :meth:`syncedStop` if ~motor.connectedToBrick error('Motor::stop: Motor-Object not connected to comm handle.'); @@ -337,8 +338,6 @@ classdef Motor < MaskedHandle & dynamicprops elseif motor.isSynced && motor.isRunning motor.syncedStop(); return; -% error(['Motor::stop: Motor is running synchronized with another motor. ' ,... -% 'Use ''syncedStop'' on the ''master''-motor.']); end motor.commInterface.outputStop(0, motor.port, motor.brakeMode_); @@ -351,7 +350,7 @@ classdef Motor < MaskedHandle & dynamicprops end function syncedStart(motor, syncMotor, varargin) - % Starts this motor synchronized with another + % Starts this motor synchronized with another. % % The motor, with which this method is called, acts as a *master*, meaning that the % synchronized control is done with it und uses its parameters. When syncedStart is @@ -367,7 +366,7 @@ classdef Motor < MaskedHandle & dynamicprops % turnRatio (numeric in [-200,200]): Ratio between the two master's and the % slave's motor speed. With values!=0 one motor will be slower than the other % or even turn into the other direction. This can be used for turning car-like - % robots, for example. (Read in Firmware-comments in c_output.c): |br| + % robots, for example. *[OPTIONAL]* (Read in Firmware-comments in c_output.c): |br| % -> 0 is moving straight forward |br| % -> Negative values turn to the left |br| % -> Positive values turn to the right |br| @@ -375,20 +374,22 @@ classdef Motor < MaskedHandle & dynamicprops % -> Value +100 stops the right motor |br| % -> Values less than -100 makes the left motor run the opposite direction of the right motor (Spin) |br| % -> Values greater than +100 makes the right motor run the opposite direction of the left motor (Spin) |br| - % + % % Notes: - % * This is right now a pretty 'heavy' function, as it tests if both motors are - % connected AND aren't running, wasting four packets, keep that in mind + % * This is a pretty 'heavy' function, as it tests if both motors are + % connected AND aren't running, wasting four packets, keep that in mind. % % Example: - % b = EV3(); |br| - % b.connect('usb'); |br| - % m = b.motorA; |br| - % slave = b.motorB; |br| - % m.power = 50; |br| - % m.syncedStart(slave); |br| + % b = EV3(); % |br| + % b.connect('usb'); % |br| + % m = b.motorA; % |br| + % slave = b.motorB; % |br| + % m.power = 50; % |br| + % m.syncedStart(slave); % |br| % % Do stuff |br| - % m.stop(); |br| + % m.stop(); % |br| + % + % See also MOTOR.STOP, MOTOR.SYNCEDSTOP / :meth:`stop`, :meth:`syncedStop` turnRatio = 0; @@ -422,10 +423,6 @@ classdef Motor < MaskedHandle & dynamicprops error('Motor::syncedStart: One of the motors is already running!'); end -% if motor.power == 0 -% warning('Motor::syncedStart: Synchronized motors starting with power=0.'); -% end - % If the motor coasts into its stops, the internal tachocount has to be reset % before each start for it to behave predictable if motor.brakeMode_ == BrakeMode.Coast || motor.internalTachoCount ~= 0 @@ -489,7 +486,11 @@ classdef Motor < MaskedHandle & dynamicprops function syncedStop(motor) % Stops both motors previously started with syncedStart. % - % See also MOTOR.SYNCEDSTART + % Notes: + % * This method is called automatically by stop(), if the motors have been + % started using syncedStart, and the regular stop-method has been called afterwards. + % + % See also MOTOR.SYNCEDSTART, MOTOR.STOP / :meth:`syncedStart`, :meth:`stop` if ~motor.isSynced error('Motor::syncedStop: Motor has not been started synchronized with another.'); @@ -536,65 +537,31 @@ classdef Motor < MaskedHandle & dynamicprops end function waitFor(motor) - % Stops execution of program as long as motor is running + % Stops execution of program as long as motor is running. % % Notes: - % * (OLD)This one's a bit tricky. The opCode OutputReady makes the brick stop sending + % * This one's a bit tricky. The opCode which is supposed to be used here, OutputReady, + % makes the brick stop sending % responses until the motor has stopped. For security reasons, in this toolbox % there is an internal timeout for receiving messages from the brick. It raises % an error if a reply takes too long, which would happen in this case. As a % workaround, there is an infinite loop that catches errors from outputReady and % continues then, until outputReady will actually finish without an error. - % * (OLD)OutputReady (like OutputTest in isRunning) sometimes doesn't work. If - % outputReady returns in less than a second, another while-loop iterates until - % the motor has stopped, this time using motor.isRunning() (this only works as - % long as not both OutputTest and OutputReady are buggy). - % * (OLD)Workaround: Poll isRunning (which itself return (speed>0)) until it - % is false (No need to check if motor is connected as speed correctly - % returns 0 if it's not) + % * Workaround: Poll isRunning until it is false (No need to check if motor is + % connected as speed correctly returns 0 if it's not) if ~motor.connectedToBrick error('Motor::waitFor: Motor-Object not connected to comm handle.'); end - %pause(0.1); while motor.isRunning - pause(0.03); - end -% elseif ~motor.limitValue -% error(['Motor::waitFor: Motor has no tacho limit. ' ,... -% 'Can''t reliably determine whether it is running or not.']); -% end -% -% tic; -% while 1 -% try -% warning('off','all'); -% -% motor.commInterface.outputReady(0, motor.port); -% t = toc; -% -% if t < 1 -% while motor.isRunning() % If outputReady correctly returned in less -% % than a second, isRunning should instantly send 0. -% end -% end -% -% warning('on','all'); -% break; -% catch % TO DO: Catch only timeout exception, otherwise death and destruction possible (aka infinite loop) -% continue; -% end -% end -% -% if motor.debug -% fprintf('(DEBUG) Motor::waitFor: Called outputReady on Port %s\n', motor.port); -% end + pause(0.03); + end end function internalReset(motor) % Resets internal tacho count. Use this if motor behaves weird (i.e. not starting at all, or not correctly - % running to limitValue) + % running to limitValue). % % The internal tacho count is used for positioning the motor. When the % motor is running with a tacho limit, internally it uses another counter than the @@ -604,11 +571,10 @@ classdef Motor < MaskedHandle & dynamicprops % % Notes: % * A better name would probably be resetPosition... - % * Gets called automatically when starting the motor and the internal tacho - % count is > 0 + % * Gets called automatically when starting the motor and the internal tacho count is > 0 % % - % See also MOTOR.RESETTACHOCOUNT + % See also MOTOR.RESETTACHOCOUNT / :attr:`resetTachoCount` if ~motor.connectedToBrick error(['Motor::internalReset: Motor-Object not connected to brick handle.',... @@ -627,7 +593,9 @@ classdef Motor < MaskedHandle & dynamicprops end function resetTachoCount(motor) - % Resets tachocount + % Resets tachocount. + % + % See also MOTOR.TACHOCOUNT / :attr:`tachoCount` if ~motor.connectedToBrick error('Motor::resetTachoCount: Motor-Object not connected to comm handle.'); @@ -645,10 +613,16 @@ classdef Motor < MaskedHandle & dynamicprops end function setBrake(motor, brake) - % Apply or release brake of motor + % Apply or release brake of motor. % % Arguments: % brake (bool): If true, brake will be pulled + % + % Notes: + % * This method does not affect Motor.brakeMode. After the next run, the motor + % will again be stopped as specified in Motor.brakeMode. + % + % See also MOTOR.BRAKEMODE / :attr:`brakeMode` if ~isBool(brake) error('Motor::setBrake: Given parameter is not a valid bool.'); @@ -690,12 +664,6 @@ classdef Motor < MaskedHandle & dynamicprops function set.speedRegulation(motor, speedRegulation) if ~isBool(speedRegulation) error('Motor::set.speedRegulation: Given parameter is not a bool.'); -% elseif motor.connectedToBrick && motor.physicalMotorConnected && ~motor.speedRegulation && speedRegulation -% pause(0.5); -% if motor.isRunning -% error(['Motor::set.speedRegulation: Cannot change speed regulation while ', ... -% 'is motor is moving.']); -% end end speedRegulation = str2bool(speedRegulation); @@ -809,20 +777,20 @@ classdef Motor < MaskedHandle & dynamicprops % Sets multiple Motor properties at once using MATLAB's inputParser. % % Arguments: - % debug (bool) *[OPTIONAL]* - % smoothStart (numeric in [0, limitValue]) *[OPTIONAL]* - % smoothStop (numeric in [0, limitValue]) *[OPTIONAL]* - % speedRegulation (bool) *[OPTIONAL]* - % brakeMode ('Coast'|'Brake') *[OPTIONAL]* - % limitMode ('Time'|'Tacho') *[OPTIONAL]* - % limitValue (numeric > 0) *[OPTIONAL]* - % power (numeric in [-100,100]) *[OPTIONAL]* - % batteryMode ('Voltage'|'Percentage') *[OPTIONAL]* + % debug (bool): *[OPTIONAL]* + % smoothStart (numeric in [0, limitValue]): *[OPTIONAL]* + % smoothStop (numeric in [0, limitValue]): *[OPTIONAL]* + % speedRegulation (bool): *[OPTIONAL]* + % brakeMode ('Coast'|'Brake'): *[OPTIONAL]* + % limitMode ('Time'|'Tacho'): *[OPTIONAL]* + % limitValue (numeric > 0): *[OPTIONAL]* + % power (numeric in [-100,100]): *[OPTIONAL]* + % batteryMode ('Voltage'|'Percentage'): *[OPTIONAL]* % % Example: - % b = EV3(); |br| - % b.connect('bt', 'serPort', '/dev/rfcomm0'); |br| - % b.motorA.setProperties('debug', 'on', 'power', 50, 'limitValue', 720, 'speedRegulation', 'on'); |br| + % b = EV3(); % |br| + % b.connect('bt', 'serPort', '/dev/rfcomm0'); % |br| + % b.motorA.setProperties('debug', 'on', 'power', 50, 'limitValue', 720, 'speedRegulation', 'on'); % |br| % % Instead of: b.motorA.debug = 'on'; |br| % % b.motorA.power = 50; |br| % % b.motorA.limitValue = 720; |br| @@ -929,15 +897,11 @@ classdef Motor < MaskedHandle & dynamicprops end function running = get.isRunning(motor) - running = 0; - + busyFlag = 0; if motor.connectedToBrick busyFlag = motor.getBusyFlag(); - else - busyFlag = 0; end - % assert(~(motor.state.startedNotBusy && busyFlag)); running = motor.state.startedNotBusy || busyFlag; end @@ -974,7 +938,7 @@ classdef Motor < MaskedHandle & dynamicprops methods (Access = private) % Private functions that directly interact with commLayer function success = setPower(motor, power) - %setPower Sets given power value on the physical Brick. + % Sets given power value on the physical Brick. % % Notes: % * If motor is running with a limit, calling outputSpeed/outputPower, to @@ -987,13 +951,9 @@ classdef Motor < MaskedHandle & dynamicprops % success (bool): if true, power has successfully been set if ~motor.connectedToBrick || ~motor.physicalMotorConnected -% error('Motor::getTachoCount: Motor-Object not connected to comm handle.'); success = false; return; - end - - % assert(motor.physicalMotorConnected==true); - % assert(motor.limitValue==0); + end; if motor.speedRegulation motor.commInterface.outputSpeed(0, motor.port, power); @@ -1012,23 +972,6 @@ classdef Motor < MaskedHandle & dynamicprops return; end - function setMode(motor, mode) %% DEPRECATED - if ~motor.connectedToBrick - error('Motor::getTachoCount: Motor-Object not connected to comm handle.'); - elseif ~motor.physicalMotorConnected - error('Motor::getTachoCount: No physical motor connected to Port %s',... - port2str('Motor', motor.port)); - end - - motor.commInterface.inputReadSI(0, motor.portInput, mode); % Reading a value implicitly - % sets the mode. - - if motor.debug - fprintf('(DEBUG) Motor::setMode: Called inputReadSI on Port %s\n',... - port2str('Motor', motor.port)); - end - end - function [type,mode] = getTypeMode(motor) if ~motor.connectedToBrick error('Motor::getTypeMode: Motor-Object not connected to comm handle.'); @@ -1175,8 +1118,6 @@ classdef Motor < MaskedHandle & dynamicprops %applyState Sets motor state to saved state and deletes the dynamic property in %which the latter is stored - %assert(length(motor.findprop('savedState')) ~= 0); - motor.state = motor.savedState; delete(motor.findprop('savedState')) end diff --git a/source/Sensor.m b/source/Sensor.m index 360a06e441cd0280af6016960625d42a1882b156..bbf73675d55a5888a61e181ce902f5711ea141ec 100755 --- a/source/Sensor.m +++ b/source/Sensor.m @@ -8,14 +8,13 @@ classdef Sensor < MaskedHandle % * You don't need to create instances of this class. The EV3-class automatically creates % instances for each sensor port, and you can work with them via the EV3-object. % * The Sensor-class represents sensor ports, not individual sensors! - % + % * When an input argument of a method is marked as optional, the argument needs to be + % 'announced' by a preceding 2nd argument, which is a string containing the name of the argument. + % For example, Motor.setProperties may be given a power-parameter. The syntax would be as + % follows: *brickObject.motorA.setProperties('power', 50);* % % Attributes: - % mode (DeviceMode.{Type}): Sensor mode in which the value will be read. By default, - % mode is set to DeviceMode.Default.Undefined. Once a physical sensor is connected - % to the port *and* the physical Brick is connected to the EV3-object, the allowed - % mode and the default mode for a Sensor-object are the following (depending on the - % sensor type): *[WRITABLE]* + % mode (DeviceMode.{Type}): Sensor mode in which the value will be read. By default, mode is set to *DeviceMode.Default.Undefined*. See also :attr:`type`. *[WRITABLE]* |br| Once a physical sensor is connected to the port *and* the physical Brick is connected to the EV3-object, the allowed mode and the default mode for a Sensor-object are the following (depending on the sensor type): % % * Touch-Sensor: % * DeviceMode.Touch.Pushed *[Default]* @@ -75,7 +74,7 @@ classdef Sensor < MaskedHandle % the sublayer ('communication layer'), there is feedback in the console about what % command has been called. *[WRITABLE]* % value (numeric): Value read from hysical sensor. What the value represents depends on - % sensor.mode. *[READ-ONLY]* + % :attr:`mode`. *[READ-ONLY]* % type (DeviceType): Type of physical sensor connected to the port. Possible types are: [READ-ONLY] % % * DeviceType.NXTTouch @@ -238,10 +237,12 @@ classdef Sensor < MaskedHandle %% Brick functions function reset(sensor) - % Resets value on sensor + % Resets sensor value. % % Notes: % * This clears ALL the sensors right now, no other Op-Code available... :( + % + if ~sensor.connectedToBrick error('Sensor::reset: Sensor-Object not connected to comm handle.'); elseif ~sensor.physicalSensorConnected @@ -311,13 +312,13 @@ classdef Sensor < MaskedHandle % Sets multiple Sensor properties at once using MATLAB's inputParser. % % Arguments: - % debug (bool) *[OPTIONAL]* - % mode (DeviceMode.{Type}) *[OPTIONAL]* + % debug (bool): *[OPTIONAL]* + % mode (DeviceMode.{Type}): *[OPTIONAL]* % % Example: - % b = EV3(); |br| - % b.connect('bt', 'serPort', '/dev/rfcomm0'); |br| - % b.sensor1.setProperties('debug', 'on', 'mode', DeviceMode.Color.Ambient); |br| + % b = EV3(); % |br| + % b.connect('bt', 'serPort', '/dev/rfcomm0'); % |br| + % b.sensor1.setProperties('debug', 'on', 'mode', DeviceMode.Color.Ambient); % |br| % % Instead of: b.sensor1.debug = 'on'; |br| % % b.sensor1.mode = DeviceMode.Color.Ambient; |br| %