www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 4332291f58936f07d87b173d2ea10b1e35779d5f
parent 77e84ff8947ea097018fdda7e688cd39e6c8ade4
Author: Davide P. Cervone <dpvc@union.edu>
Date:   Mon, 20 Feb 2012 12:31:44 -0500

Continues updating documentation, in particular the Advanced Topics and API documents.  Added a number of new example files.

Diffstat:
Mdocs/html/_sources/api/callback.txt | 81+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------
Mdocs/html/_sources/api/elementjax.txt | 36++++++++++++++++++++++++++++--------
Mdocs/html/_sources/api/html.txt | 9+++++++++
Mdocs/html/_sources/api/hub.txt | 76++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
Mdocs/html/_sources/api/inputjax.txt | 45+++++++++++++++++++++++++++++++++++++++++++--
Mdocs/html/_sources/api/jax.txt | 27++++++++-------------------
Mdocs/html/_sources/api/outputjax.txt | 127+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
Mdocs/html/_sources/api/variable.txt | 13+++++++++++--
Mdocs/html/_sources/callbacks.txt | 8++++----
Mdocs/html/_sources/dynamic.txt | 79+++++++++++++++++++++++++++++++++----------------------------------------------
Mdocs/html/_sources/model.txt | 40++++++++++++++++++++++++++--------------
Mdocs/html/_sources/signals.txt | 47+++++++++++++++++++++++++----------------------
Mdocs/html/_sources/startup.txt | 42++++++++++++++++++++++++++++++++++--------
Mdocs/html/_sources/synchronize.txt | 33++++++++++++++++++---------------
Mdocs/html/_sources/typeset.txt | 32++++++++++++++++++++++++++------
Mdocs/html/_static/mathjax_mathml.user.js | 2+-
Mdocs/html/_static/mathjax_wikipedia.user.js | 3+--
Mdocs/html/api/callback.html | 130++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------
Mdocs/html/api/elementjax.html | 53+++++++++++++++++++++++++++++++++++++++++++++--------
Mdocs/html/api/html.html | 21+++++++++++++++++++++
Mdocs/html/api/hub.html | 107+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------
Mdocs/html/api/inputjax.html | 84+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
Mdocs/html/api/jax.html | 43++++++++++---------------------------------
Mdocs/html/api/outputjax.html | 217+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
Mdocs/html/api/variable.html | 17+++++++++++++++--
Mdocs/html/callbacks.html | 8++++----
Mdocs/html/dynamic.html | 76++++++++++++++++++++++++++++++++--------------------------------------------
Mdocs/html/genindex.html | 28++++++++++++++++++++++++----
Mdocs/html/index.html | 2+-
Mdocs/html/model.html | 39+++++++++++++++++++++++++--------------
Mdocs/html/searchindex.js | 4++--
Mdocs/html/signals.html | 45+++++++++++++++++++++++----------------------
Mdocs/html/startup.html | 37+++++++++++++++++++++++++++++--------
Mdocs/html/synchronize.html | 32+++++++++++++++++---------------
Mdocs/html/typeset.html | 33+++++++++++++++++++++++++++------
Mdocs/source/_static/mathjax_mathml.user.js | 2+-
Mdocs/source/_static/mathjax_wikipedia.user.js | 3+--
Mdocs/source/api/callback.rst | 81+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------
Mdocs/source/api/elementjax.rst | 36++++++++++++++++++++++++++++--------
Mdocs/source/api/html.rst | 9+++++++++
Mdocs/source/api/hub.rst | 76++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
Mdocs/source/api/inputjax.rst | 45+++++++++++++++++++++++++++++++++++++++++++--
Mdocs/source/api/jax.rst | 27++++++++-------------------
Mdocs/source/api/outputjax.rst | 127+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
Mdocs/source/api/variable.rst | 13+++++++++++--
Mdocs/source/callbacks.rst | 8++++----
Mdocs/source/dynamic.rst | 79+++++++++++++++++++++++++++++++++----------------------------------------------
Mdocs/source/model.rst | 40++++++++++++++++++++++++++--------------
Mdocs/source/signals.rst | 47+++++++++++++++++++++++++----------------------
Mdocs/source/startup.rst | 42++++++++++++++++++++++++++++++++++--------
Mdocs/source/synchronize.rst | 33++++++++++++++++++---------------
Mdocs/source/typeset.rst | 32++++++++++++++++++++++++++------
Atest/examples.html | 36++++++++++++++++++++++++++++++++++++
Mtest/index-images.html | 4++--
Mtest/index.html | 4++--
Atest/sample-dynamic-2.html | 117+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtest/sample-dynamic-steps.html | 4++--
Mtest/sample-dynamic.html | 17++++++-----------
Atest/sample-eqnum.html | 138+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atest/sample-eqrefs.html | 85+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atest/sample-loader-config.html | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atest/sample-loader.html | 47+++++++++++++++++++++++++++++++++++++++++++++++
Mtest/sample-signals.html | 4++--
Mtest/sample.html | 4++--
64 files changed, 2313 insertions(+), 578 deletions(-)

diff --git a/docs/html/_sources/api/callback.txt b/docs/html/_sources/api/callback.txt @@ -58,7 +58,7 @@ A callback specification is any one of the following: the given function, and it would return their sum, ``5``, when the callback is executed. - .. describe:: [object, fn] + .. describe:: [object, fn] An array containing an object to use as `this` and a function to call for the callback. For example, @@ -75,7 +75,7 @@ A callback specification is any one of the following: Similar to the previous case, but with data that is passed to the function as well. - ..describe:: ["method", object] + .. describe:: ["method", object] Here, `object` is an object that has a method called `method`, and the callback will execute that method (with the object as @@ -220,6 +220,26 @@ MathJax.Callback Methods - **callback** --- the callback specification :Returns: the callback object +.. method:: Queue([callback,...]) + + Creates a `MathJax.CallBack.Queue` object and pushes the given + callbacks into the queue. See :ref:`Using Queues <using-queues>` + for more details about MathJax queues. + + :Parameters: + - **callback** --- one or more callback specifications + :Returns: the `Queue` object + +.. method:: Signal(name) + + Looks for a named signal, creates it if it doesn't already exist, + and returns the signal object. See + :ref:`Using Signals <using-signals>` for more details. + + :Parameters: + - **name** --- name of the signal to get or create + :Returns: the `Signal` object + .. method:: ExecuteHooks(hooks[, data[,reset]]) Calls each callback in the `hooks` array (or the single hook if it @@ -231,29 +251,54 @@ MathJax.Callback Methods execute when all the ones returned by the hooks have been completed. Otherwise, :meth:`MathJax.Callback.ExecuteHooks()` returns ``null``. - + :Parameters: - **hooks** --- array of hooks to be called, or a hook - **data** --- array of arguments to pass to each hook in turn - **reset** --- ``true`` if the :meth:`reset()` method should be called :Returns: callback that waits for all the hooks to complete, or ``null`` -.. method:: Queue([callback,...]) +.. method:: Hooks(reset) - Creates a `MathJax.CallBack.Queue` object and pushes the given - callbacks into the queue. See :ref:`Using Queues <using-queues>` - for more details about MathJax queues. + Creates a prioritized list of hooks that are called in order based + on their priority (low priority numbers are handled first). This + is meant to replace :meth:`MathJax.Callback.ExecuteHooks()` and is + used internally for signal callbacks, pre- and post-filters, and + other lists of callbacks. :Parameters: - - **callback** --- one or more callback specifications - :Returns: the `Queue` object + - **reset** --- ``true`` if callbacks can be called more than once + :Returns: the `Hooks` object -.. method:: Signal(name) - - Looks for a named signal, creates it if it doesn't already exist, - and returns the signal object. See - :ref:`Using Signals <using-signals>` for more details. - - :Parameters: - - **name** --- name of the signal to get or create - :Returns: the `Signal` object + The list has the following methods: + + .. method:: Add(hook[,priority]) + + Add a callback to the prioritized list. If ``priority`` is + not provided, the default is 10. The ``hook`` is a `Callback` + specification as described above. + + :Parameters: + - **hook** --- callback specification to add to the list + - **priority** --- priority of the hook in the list (default: 10) + :Returns: the callback object being added + + .. method:: Remove(hook) + :noindex: + + Remove a given hook (as returned from :meth:`Add()` above) + from the prioritized list. + + :Parameters: + - **hook** --- the callback to be removed + :Returns: ``null`` + + .. method:: Execute() + + Execute the list of callbacks, resetting them if requested. + If any of the hooks return callbacks, then ``Execute()`` + returns a callback that will be executed when they all have + completed. + + :Returns: a callback object or ``null`` + diff --git a/docs/html/_sources/api/elementjax.txt b/docs/html/_sources/api/elementjax.txt @@ -42,13 +42,11 @@ Instance Properties .. describe:: inputJax - A reference to the input jax that created the element. (In the - future, this will be changed to the name of the input jax.) + The name of the input jax that created the element. .. describe:: outputJax - A reference to the output jax that has processed this element. (In - the future, this will be changed to the name of the output jax.) + The name of the output jax that has processed this element. .. describe:: inputID @@ -89,13 +87,25 @@ Methods - **callback** --- the callback specification :Returns: the callback object +.. Method:: Rerender([callback]) + :noindex: + + Removes the output and produces it again (for example, if CSS has + changed that would alter the spacing of the mathematics). Note + that the internal representation isn't regenerated; only the + output is. The `callback`, if any, is called when the process + completes. + + :Parameters: + - **callback** --- the callback specification + :Returns: the callback object + .. Method:: Reprocess([callback]) :noindex: - Removes the output and produces it again. This may be necessary if - there are changes to the CSS styles that would affect the layout - of the mathematics, for example. The `callback`, if any, is - called when the process completes. + Removes the output and then retranslates the input into the + internal form and reredners the output again. The `callback`, if + any, is called when the process completes. :Parameters: - **callback** --- the callback specification @@ -118,6 +128,16 @@ Methods :Returns: the ``<script>`` element +.. Method:: needsUpdate() + + Indicates whether the mathematics has changed so that its output + needs to be updated. + + :Returns: ``true`` if the mathematics needs to be reprocessed, + ``false`` otherwise + + + Output jax may add new methods to the base element jax class to perform exporting to other formats. For example, a MathML output jax could add ``toMathML()``, or an accessibility output jax could add diff --git a/docs/html/_sources/api/html.txt b/docs/html/_sources/api/html.txt @@ -92,6 +92,15 @@ Methods - **text** --- the text that is to be the script's new content :Returns: ``null`` +.. method:: getScript(script) + + Gets the contents of the ``script`` element, properly taking into + account the browser limitations and bugs. + + :Parameters: + - **script** --- the script whose content is to be retrieved + :Returns: the text of the ``script`` + .. describe:: Cookie.Set(name,data) Creates a MathJax cookie using the ``MathJax.HTML.Cookie.prefix`` diff --git a/docs/html/_sources/api/hub.txt b/docs/html/_sources/api/hub.txt @@ -31,7 +31,17 @@ Properties .. describe:: processUpdateTime: 250 The minimum time (in milliseconds) between updates of the - "Processing Math" message. + "Processing Math" message. After this amount of time has passed, + and after the next equation has finished being processed, + MathJax will stop processing momentarily so that the update + message can be displayed, and so that the browser can handle user + interaction. + +.. describe:: processUpdateDelay: 10 + + The amount of time (in milliseconds) that MathJax pauses after + issuing its processing message before starting the processing again + (to give browsers time to handle user interaction). .. describe:: signal @@ -60,6 +70,11 @@ Properties running on a Macintosh computer or a Windows computer. They will both be ``false`` for a Linux computer. + .. describe:: isMobile + + This is ``true`` when MathJax is running a mobile version of a + WebKit or Gecko-based browser. + .. describe:: isFirefox, isSafari, isChrome, isOpera, isMSIE, isKonqueror These are ``true`` when the browser is the indicated one, and @@ -97,6 +112,18 @@ Properties } ); +.. describe:: inputJax + + An object storing the MIME types associated with the various + registered input jax (these are the types of the ``<script>`` tags + that store the math to be processed by each input jax). + +.. describe:: outputJax + + An object storing the output jax associate with the various + element jax MIME types for the registered output jax. + + Methods ======= @@ -243,13 +270,31 @@ Methods .. method:: Reprocess([element[,callback]]) - Removes any typeset mathematics from the document or DOM element (or - elements if it is an array of elements), and then processes the - mathematics again, re-typesetting everything. This may be necessary, - for example, if the CSS styles have changed and those changes would - affect the mathematics. The `element` is either the DOM `id` of the - element to scan, a reference to the DOM element itself, or an array of - id's or references. The `callback` is called when the processing is + Removes any typeset mathematics from the document or DOM element + (or elements if it is an array of elements), and then processes + the mathematics again, re-typesetting everything. This may be + necessary, for example, if the CSS styles have changed and those + changes would affect the mathematics. Reprocess calls both the + input and output jax to completely rebuild the data for + mathematics. The `element` is either the DOM `id` of the element + to scan, a reference to the DOM element itself, or an array of + id's or references. The `callback` is called when the processing + is complete. + + :Parameters: + - **element** --- the element(s) to be reprocessed + - **callback** --- the callback specification + :Returns: the callback object + +.. method:: Rerender([element[,callback]]) + + Removes any typeset mathematics from the document or DOM element + (or elements if it is an array of elements), and then renders the + mathematics again, re-typesetting everything from the current + internal version (without calling the input jax again). The + `element` is either the DOM `id` of the element to scan, a + reference to the DOM element itself, or an array of id's or + references. The `callback` is called when the processing is complete. :Parameters: @@ -315,6 +360,21 @@ Methods - **element** --- the element to inspect :Returns: integer (-1, 0, 1) +.. Method:: setRenderer(renderer[,type]) + + Sets the output jax for the given element jax ``type`` (or ``jax/mml`` + if none is specified) to be the one given by ``renderer``, which + must be the name of a renderer, such as ``NativeMML`` or + ``HTML-CSS``. Note that this does not cause the math on the page + to be rerendered; it just sets the renderer for output in the + future (call :meth:``Rerender()`` above to replace the current + renderings by new ones). + + :Parameters: + - **renderer** --- the name of the output jax to use for rendering + - **type** --- the element jax MIME type whose renderer to set + :Returns: ``null`` + .. Method:: Insert(dst,src) Inserts data from the `src` object into the `dst` object. The diff --git a/docs/html/_sources/api/inputjax.txt b/docs/html/_sources/api/inputjax.txt @@ -56,13 +56,40 @@ Properties Methods ======= -.. Method:: Translate(script) +.. Method:: Process(script,state) + :noindex: + + This is the method that the ``MathJax.Hub`` calls when it needs + the input jax to process the given math ``<script>``. Its default + action is to do the following: + + 1. Start loading any element jax specified in the ``elementJax`` array; + 2. Start loading the jax's ``jax.js`` file; + 3. Start loading the required output jax (so it is ready when needed); and + 4. Redefine itself to simply return the callback for the load operation + (so that further calls to it will cause the processing to wait for the + callback). + + Once the ``jax.js`` file has loaded, this method is replaced by + the jax's ``Translate()`` method (see below), so that + subsequent calls to ``Process()`` will perform the appropriate + translation. + + :Parameters: + - **script** --- reference to the DOM ``<script>`` object for + the mathematics to be translated + - **state** --- a structure containing information about the + current proccessing state of the mathematics + (internal use) + :Returns: an `ElementJax` object, or ``null`` + +.. Method:: Translate(script,state) :noindex: This is the main routine called by MathJax when a ``<script>`` of the appropriate type is found. The default :meth:`Translate()` method throws an error indicating that :meth:`Translate()` hasn't been - redefined, so when the ``jax.js`` file loads, it should override the + defined, so when the ``jax.js`` file loads, it should override the default :meth:`Translate()` with its own version that does the actual translation. @@ -72,6 +99,9 @@ Methods :Parameters: - **script** --- the ``<script>`` element to be translated + - **state** --- a structure containing information about the + current proccessing state of the mathematics + (internal use) :Returns: the `element jax` resulting from the translation .. Method:: Register(mimetype) @@ -87,3 +117,14 @@ Methods - **mimetype** --- the MIME-type of the input this jax processes :Returns: ``null`` +.. Method:: needsUpdate(jax) + :noindex: + + This implements the element jax's ``needsUpdate()`` method, and + returns ``true`` if the ``jax`` needs to be rerendered (i.e., the + text has changed), and ``false`` otherwise. + + :Perameters: + - **jax** --- the element jax to be checked + :Returns: ``true`` if the jax's text has changed, ``false`` otherwise + diff --git a/docs/html/_sources/api/jax.txt b/docs/html/_sources/api/jax.txt @@ -63,34 +63,20 @@ Instance Properties jax. These can be modified by the author by including a configuration subsection for the specific jax in question. +.. describe:: JAXFILE: "jax.js" + + The name of the file that contains the main code for the jax. Methods ======= -.. Method:: Process(script) - :noindex: - - This is the method that the ``MathJax.Hub`` calls when it needs the - input or output jax to process the given math ``<script>``. Its - default action is to start loading the jax's ``jax.js`` file, and - redefine itself to simply return the callback for the load operation - (so that further calls to it will cause the processing to wait for the - callback). Once the ``jax.js`` file has loaded, this method is - replaced by the jax's :meth:`Translate()` method, so that subsequent calls - to :meth:`Process()` will perform the appropriate translation. - - :Parameters: - - **script** --- reference to the DOM ``<script>`` object for - the mathematics to be translated - :Returns: an `ElementJax` object, or ``null`` - .. Method:: Translate(script) This is a stub for a routine that should be defined by the jax's ``jax.js`` file when it is loaded. It should perform the translation action for the specific jax. For an input jax, it should return the `ElementJax` object that it created. The :meth:`Translate()` method is - never called directly by MathJax; during the :meth:`loadComplete()` + never called directly by MathJax; during the ``loadComplete()`` call, this function is copied to the :meth:`Process()` method, and is called via that name. The default :meth:`Translate()` method throws an error indicating that the :meth:`Translate()` method was not @@ -147,7 +133,10 @@ Methods 5. Post the "[name] Jax Startup" message to the startup signal. 6. Perform the jax's :meth:`Startup()` method. 7. Post the "[name] Jax Ready" message to the startup signal. - 8. Perform the :meth:`MathJax.Ajax.loadComplete()` call for the + 8. Copy the ``preTranslate``, ``Translate``, and + ``postTranslate`` functions to ``preProcess``, ``Process``, + and ``postProcess``. + 9. Perform the :meth:`MathJax.Ajax.loadComplete()` call for the ``jax.js`` file. Note that the configuration process (the :meth:`Config()` call) can diff --git a/docs/html/_sources/api/outputjax.txt b/docs/html/_sources/api/outputjax.txt @@ -48,17 +48,65 @@ Properties The directory where the jax files are stored (e.g., ``"[MathJax]/jax/output/HTML-CSS"``); +.. describe:: fontDir + + The directory where the fonts are stored (e.g., ``"[MathJax]/fonts"``) + +.. describe:: imageDir + + The directory where MathJax images are found (e.g. ``"[MathJax]/images"``) + Methods ======= -.. Method:: Translate(script) +.. Method:: preProcess(state) + + This is called by ``MathJax.Hub`` to ask the output processor to + prepare to process math scripts. Its default action is to start + loading the jax's ``jax.js`` file, and redefine itself to simply + return the callback for the load operation (so that further calls + to it will cause the processing to wait for the callback). + + Once the ``jax.js`` file has loaded, this method is replaced by + the jax's :meth:`preTranslate()` method, so that subsequent calls + to :meth:`preProcess()` will perform the appropriate translation. + + :Parameters: + - **state** --- a structure containing information about the + current proccessing state of the mathematics + :Returns: ``null`` + +.. Method:: preTranslate(state) + + This routine replaces :meth:`preProcess()` above when the jax's + ``jax.js`` file is loaded. It is called by ``MathJax.Hub`` to ask + the output processor to prepare to process math scripts. (For + example, the HTML-CSS output jax uses this to determine em-sizes + for all the mathematics at once, to minimize page reflows that + slow down Internet Explorer.) + + The routine can use ``state.jax[this.id]`` to obtain the array of + element jax that are to be processed. The output jax can use the + ``state`` variable to maintain its own state information, but + any properties that it adds to the variable should have a prefix + that is the output jax's ID. For example, the HTML-CSS output jax + might use ``state.HTMLCSSlast`` to keep track of the last equation + it processed, or could add ``state.HTMLCSS = {...}`` to create an + object of its own within the state variable. + + :Parameters: + - **state** --- a structure containing information about the + current proccessing state of the mathematics + :Returns: ``null`` + +.. Method:: Translate(script,state) :noindex: This is the main routine called by MathJax when an element jax is to be converted to output. The default :meth:`Translate()` method throws an error indicating that :meth:`Translate()` hasn't been - redefined, so when the ``jax.js`` file loads, it should override the + defined, so when the ``jax.js`` file loads, it should override the default :meth:`Translate()` with its own version that does the actual translation. @@ -66,12 +114,35 @@ Methods element jax for the given script. The translation process may modify the element jax (e.g., if it has data that needs to be stored with the jax), and may insert DOM elements into the - document near the jax's ``<script>`` tag. + document near the jax's ``<script>`` tag. The output jax can use + the ``state`` variable to maintain information about its + processing state, but see :meth:`preTranslate()` above for naming + conventions for properties that are added. :Parameters: - **script** --- the ``<script>`` element to be translated + - **state** --- a structure containing information about the + current proccessing state of the mathematics :Returns: the `element jax` resulting from the translation +.. Method:: postTranslate(state) + + This routines is called by ``MathJax.Hub`` when the translation + of math elements is complete, and can be used by the output + processor to finalize any actions that it needs to complete. + (For example, making the mathematics visible, or forcing a reflow + of the page.) + + The routine can use ``state.jax[this.id]`` to obtain the array of + element jax that were processed, or can use the ``state`` variable + to store its own state information (see :meth:`preProcess()` + above for caveats about naming properties). + + :Parameters: + - **state** --- a structure containing information about the + current proccessing state of the mathematics + :Returns: ``null`` + .. Method:: Register(mimetype) :noindex: @@ -95,3 +166,53 @@ Methods :Parameters: - **jax** --- the element jax whose display should be removed :Returns: ``null`` + + +If an output jax wants its output to handle the contextual menu item +and zooming, then it needs to tie into the event-handling code +(`MathEvents`) and the zoom-handling code (`MathZoom`). That requires +the following methods. + +.. Method:: getJaxFromMath(math) + + This is called by the event-handling code (`MathEvents`) to get + the element jax associated with the DOM element that caused an + event to occur. The output jax will have attached event handlers + to some DOM element that is part of its output, and the + `MathEvents` code uses this routine to map back to the jax + associated with that output. + + :Parameters: + - **math** --- a DOM element that triggered a DOM event + (e.g., a mouse click) + :Returns: the `ElementJax` structure associated with the DOM element + +.. Method:: Zoom(jax,span,math,Mw,Mh) + + This routine is called by the zoom-handling code (`MathZoom`) + when an expression has received its zoom trigger event (e.g., a + double-click). The ``jax`` is the math that needs to be zoomed, + ``span`` is a ``<span>`` element in which the zoomed version of + the math should be placed, ``math`` is the DOM element that + received the zoom trigger event, and ``Mw`` and ``Mh`` are the + maximum width and height allowed for the zoom box (the ``span``). + + The return value is an object with the following properties: + + - ``Y`` --- the vertical offset from the top of the ``span`` to + the baseline of the mathematics + - ``mW`` --- the width of the original mathematics element + - ``mH`` --- the height of the original mathematics element + - ``zW`` --- the width of the zoomed math + - ``zH`` --- the height of the zoomed math + + All of these values are in pixels. + + :Parameters: + - **jax** --- the jax to be zoomed + - **span** --- the ``<span>`` in which to place the zoomed math + - **math** --- the DOM element generating the zoom event + - **Mw** --- the maximum width of the zoom box + - **Mh** --- the maximum height of the zoom box + :Returns: a structure as described above + diff --git a/docs/html/_sources/api/variable.txt b/docs/html/_sources/api/variable.txt @@ -19,7 +19,7 @@ Main MathJax Components .. describe:: MathJax.Ajax Contains the code for loading external modules and creating - stylesheets. Most of the code that causes most of MathJax to + stylesheets. Most of the code that causes MathJax to operate asynchronously is handled here. .. describe:: MathJax.Message @@ -43,6 +43,11 @@ Main MathJax Components For example, the `tex2jax` preprocessor creates ``MathJax.Extension.tex2jax`` for its code and variables. +.. describe:: MathJax.Menu + + Initially null, this is where the MathJax contextual menu is + stored, when ``extensions/MathMenu.js`` is loaded. + .. describe:: MathJax.Object Contains the code for the MathJax object-oriented programming model. @@ -75,7 +80,11 @@ Properties .. describe:: MathJax.version - The version number of the MathJax library. + The version number of the MathJax library as a whole. + +.. describe:: MathJax.fileversion + + The version number of the ``MathJax.js`` file specifically. .. describe:: MathJax.isReady diff --git a/docs/html/_sources/callbacks.txt b/docs/html/_sources/callbacks.txt @@ -214,10 +214,10 @@ you simply passed the object's method to ``setTimeout()``. Or you might want to pass an argument to the function called by ``setTimeout()``. (Altough the ``setTimeout()`` function can accept additional arguements that are supposed to be passed on to the code -when it is called, Internet Explorer does not implement that feature, -so you can't rely on it.) You can use a `Callback` object to -do this, and the :meth:`MathJax.Callback()` method will create one for -you. For example, +when it is called, some versions of Internet Explorer do not implement +that feature, so you can't rely on it.) You can use a `Callback` +object to do this, and the :meth:`MathJax.Callback()` method will +create one for you. For example, .. code-block:: javascript diff --git a/docs/html/_sources/dynamic.txt b/docs/html/_sources/dynamic.txt @@ -6,21 +6,16 @@ Loading MathJax Dynamically MathJax is designed to be included via a ``<script>`` tag in the ``<head>`` section of your HTML document, and it does rely on being -part of the original document in that it uses an ``onload`` event -handler to synchronize its actions with the loading of the page. -If you wish to insert MathJax into a document after it has -been loaded, that will normally occur *after* the page's ``onload`` -handler has fired, and so MathJax will not be able to tell if it is -safe for it to process the contents of the page. Indeed, it will wait -forever for its ``onload`` handler to fire, and so will never process -the page. - -To solve this problem, you will need to call MathJax's ``onload`` -handler yourself, to let it know that it is OK to typeset the -mathematics on the page. You accomplish this by calling the -:meth:`MathJax.Hub.Startup.onload()` method as part of your MathJax -startup script. To do this, you will need to give MathJax an in-line -configuration. +part of the original document in that it uses an ``onload`` or +``DOMContentLoaded`` event handler to synchronize its actions with the +loading of the page. If you wish to insert MathJax into a document +after it has been loaded, that will normally occur *after* the page's +``onload`` handler has fired, and prior to version 2.0, MathJax had to +be told not to wait for the page ``onload`` event by calling +:meth:`MathJax.Hub.Startup.onload()` by hand. That is no longer +necessary, as MathJax v2.0 detects whether the page is already +available and when it is, it processes it immediately rather than +waiting for an event that has already happened. Here is an example of how to load and configure MathJax dynamically: @@ -29,43 +24,37 @@ Here is an example of how to load and configure MathJax dynamically: (function () { var script = document.createElement("script"); script.type = "text/javascript"; - script.src = "http://cdn.mathjax.org/mathjax/latest/MathJax.js"; - - var config = 'MathJax.Hub.Config({' + - 'extensions: ["tex2jax.js"],' + - 'jax: ["input/TeX","output/HTML-CSS"]' + - '});' + - 'MathJax.Hub.Startup.onload();'; - - if (window.opera) {script.innerHTML = config} - else {script.text = config} - + script.src = "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"; document.getElementsByTagName("head")[0].appendChild(script); })(); -You can adjust the ``config`` variable to your needs, but be careful to get -the commas right. The ``window.opera`` test is because some versions of -Opera don't handle setting ``script.text`` properly, while Internet -Explorer doesn't handle setting the ``innerHTML`` of a script tag. - -Here is a version that uses the ``config=filename`` method to -configure MathJax: +If you need to provide in-line configuration, you can do that using a +MathJax's configuration script: .. code-block:: javascript (function () { - var script = document.createElement("script"); + var head = document.getElementsByTagName("head")[0], script; + script = document.createElement("script"); + script.type = "text/x-mathjax-config"; + script[(window.opera ? "innerHTML" : "text")] = + "MathJax.Hub.Config({\n" + + " tex2jax: { inlineMath: [['$','$'], ['\\\\(','\\\\)']] }\n" + + "});" + head.appendChild(script); + script = document.createElement("script"); script.type = "text/javascript"; - script.src = "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full"; - - var config = 'MathJax.Hub.Startup.onload();'; - - if (window.opera) {script.innerHTML = config} - else {script.text = config} - - document.getElementsByTagName("head")[0].appendChild(script); + script.src = "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"; + head.appendChild(script); })(); +You can adjust the configuration to your needs, but be careful to get +the commas right, as Internet Explorer 6 and 7 will not tolerate an +extra comma before a closing brace. The ``window.opera`` test is +because some versions of Opera don't handle setting ``script.text`` +properly, while some versions of Internet Explorer don't handle +setting ``script.innerHTML``. + Note that the **only** reliable way to configure MathJax is to use an in-line configuration block of the type discussed above. You should **not** call :meth:`MathJax.Hub.Config()` directly in your code, as it will @@ -116,9 +105,8 @@ IE+MathPlayer. (document.getElementsByTagNameNS == null ? false : (document.getElementsByTagNameNS("http://www.w3.org/1998/Math/MathML","math").length > 0))) { var script = document.createElement("script"); + script.type = "text/javascript"; script.src = "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full"; - var config = 'MathJax.Hub.Startup.onload()'; - if (window.opera) {script.innerHTML = config} else {script.text = config} document.getElementsByTagName("head")[0].appendChild(script); } } @@ -157,9 +145,8 @@ converting the math images to their original TeX code. // Load MathJax and have it process the page // var script = document.createElement("script"); + script.type = "text/javascript"; script.src = "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full"; - var config = 'MathJax.Hub.Startup.onload()'; - if (window.opera) {script.innerHTML = config} else {script.text = config} document.getElementsByTagName("head")[0].appendChild(script); } } diff --git a/docs/html/_sources/model.txt b/docs/html/_sources/model.txt @@ -5,7 +5,7 @@ The MathJax Processing Model The purpose of MathJax is to bring the ability to include mathematics easily in web pages to as wide a range of browsers as possible. Authors can specify mathematics in a variety of formats (e.g., -:term:`MathML` or :term:`LaTeX`), and MathJax provides high-quality +:term:`MathML`, :term:`LaTeX`, or :term:`AsciiMath`), and MathJax provides high-quality mathematical typesetting even in those browsers that do not have native MathML support. This all happens without the need for special downloads or plugins, but rendering will be enhanced if high-quality @@ -35,7 +35,8 @@ document is to be typeset as mathematics. In this case, MathJax can run a preprocessor to locate the math delimiters and replace them by the special tags that it uses to mark the formulas. There are preprocessors for :ref:`TeX notation <TeX-support>`, :ref:`MathML -notation <MathML-support>`, and the :ref:`jsMath notation +notation <MathML-support>`, :ref:`AsciiMath notation +<AsciiMath-support>` and the :ref:`jsMath notation <jsMath-support>` that uses `span` and `div` tags. For pages that are constructed programmatically, such as HTML @@ -44,10 +45,12 @@ format (e.g., pages produced from Markdown documents, or via programs like `tex4ht`), it would be best to use MathJax's special tags directly, as described below, rather than having MathJax run another preprocessor. This will speed up the final display of the -mathematics, since the extra preprocessing step would not be needed, -and it also avoids the conflict between the use of the less-than sign, +mathematics, since the extra preprocessing step would not be needed. +It also avoids the conflict between the use of the less-than sign, ``<``, in mathematics and as an HTML special character (that starts -an HTML tag). +an HTML tag), and several other issues involved in having the +mathematics directly in the text of the page (see the documentation on +the various input jax for more details on this). .. _mathjax-script-tags: @@ -69,8 +72,9 @@ kind of script that the tag contains. The usual (and default) value is ``type="text/javascript"``, and when a script has this type, the browser executes the script as a javascript program. MathJax, however, uses the type `math/tex` to identify mathematics in the TeX -and LaTeX notation, and `math/mml` for mathematics in MathML -notation. When the `tex2jax` or `mml2jax` preprocessors run, they +and LaTeX notation, `math/mml` for mathematics in MathML notation, and +`math/asciimath` for mathematics in AsciiMath notation. When the +`tex2jax`, `mml2jax`, or `asciimath2jax` preprocessors run, they create ``<script>`` tags with these types so that MathJax can process them when it runs its main typesetting pass. @@ -197,17 +201,25 @@ specific output format. For example, the NativeMML output jax inserts MathML tags into the page to represent the mathematics, while the HTML-CSS output jax uses HTML with CSS styling to lay out the mathematics so that it can be displayed even in browsers that don't -understand MathML. Output jax could be produced that render the -mathematics using SVG, for example, or that speak an equation for -blind users. The MathJax contextual menu can be used to switch -between the output jax that are available. +understand MathML. MathJax also has an :term:`SVG` output jax that +will render the mathematics using scalable vector grtaphics. Output +jax could be produced that render the mathematics using HTML5 canvas +elements, for example, or that speak an equation for blind users. The +MathJax contextual menu can be used to switch between the output jax +that are available. Each input and output jax has a small configuration file that is loaded when that input jax is included in the `jax` array in the MathJax configuration, and a larger file that implements the core -functionality of that particular jax. The latter file is loaded -the first time the jax is needed by MathJax to process some -mathematics. +functionality of that particular jax. The latter file is loaded the +first time the jax is needed by MathJax to process some mathematics. +Most of the combined configuration files include only the small +configuration portion for the input and output jax, making the +configuraiton file smaller and faster to load for those pages that +don't actually incldue mathematics; the combined configurations that +end in ``-full`` include both parts of the jax, so there is no delay +when the math is to be rendered, but at the expense of a larger +initial download. The **MathJax Hub** keeps track of the internal representations of the various mathematical equations on the page, and can be queried to diff --git a/docs/html/_sources/signals.txt b/docs/html/_sources/signals.txt @@ -53,14 +53,14 @@ One way that MathJax makes use of this feature is in configuring its various extensions. The extension may not be loaded when the user's configuration code runs, so the configuration code can't modify the extension because it isn't there yet. Fortunately, most extensions -signal when they are loaded and initialized via an ``Extension [name] Ready`` message, -so the configuration code can implement a listener for that message, and -have the listener perform the configuration when the message arrives. -But even if the extension *has* already been loaded, this will still -work, because the listener will receive the ready signal even if it -has already been posted. In this way, listening for signals is a -robust method of synchronizing code components no matter when they are -loaded and run. +signal when they are loaded and initialized via an ``Extension [name] +Ready`` message, or just ``[name] Ready``, so the configuration code +can implement a listener for that message, and have the listener +perform the configuration when the message arrives. But even if the +extension *has* already been loaded, this will still work, because the +listener will receive the ready signal even if it has already been +posted. In this way, listening for signals is a robust method of +synchronizing code components no matter when they are loaded and run. In some cases, it may be inappropriate for a new listener to receive past messages that were sent to a signal object. There are two ways to @@ -79,14 +79,14 @@ message, and can act on it in whatever ways they see fit. Creating a Listener =================== -MathJax maintains two separate signal channels: the `startup signal` -and the `processing signal` (or the `hub signal`). The startup signal -is where the messages about different components starting up and -becoming ready appear. The processing signal is where the messages -are sent about processing mathematics, like the ``New Math`` messages -for when newly typeset mathematics appears on the page. The latter is -cleared when a new processing pass is started (so messages from past -processing runs are not kept). +MathJax maintains two separate pre-defined signal channels: the +`startup signal` and the `processing signal` (or the `hub signal`). +The startup signal is where the messages about different components +starting up and becoming ready appear. The processing signal is where +the messages are sent about processing mathematics, like the ``New +Math`` messages for when newly typeset mathematics appears on the +page. The latter is cleared when a new processing pass is started (so +messages from past processing runs are not kept). The easiest way to create a listener is to use either :meth:`MathJax.Hub.Register.StartupHook()` or @@ -103,10 +103,12 @@ called when it arrives. For example See the :ref:`MathJax Startup Sequence <startup-sequence>` page for details of the messages sent during startup. See also the -``test/sample-signals.html`` file (and its source) for examples of -using signals. This example lists all the signals that occur while -MathJax is processing that page, so it gives useful information about -the details of the signals produced by various components. +`test/sample-signals.html +<http://cdn.mathjax.org/mathjax/latest/test/sample-signals.html>`_ +file (and its source) for examples of using signals. This example +lists all the signals that occur while MathJax is processing that +page, so it gives useful information about the details of the signals +produced by various components. In this example, the listener starts loading an extra configuration file (from the same directory as the web page). Since it returns @@ -154,8 +156,9 @@ signal's :meth:`Interest()` method, as in the following example. This will cause an alert for every signal that MathJax produces. You probably don't want to try this out, since it will produce a *lot* of -them; instead, use the ``test/sample-signals.html`` file, which -displays them in the web page. +them; instead, use the `test/sample-signals.html +<http://cdn.mathjax.org/mathjax/latest/test/sample-signals.html>`_ +file, which displays them in the web page. See the :ref:`Signal Object <api-signal>` reference page for details on the structure and methods of the signal object. diff --git a/docs/html/_sources/startup.txt b/docs/html/_sources/startup.txt @@ -90,7 +90,12 @@ pushed into the queue: .. -5. Load the jax configuration files: +5. Initialize the Message system (the grey information box in the + lower left) + +.. + +6. Load the jax configuration files: - Post the ``Begin Jax`` startup signal - Load the jax config files from the ``MathJax.Hub.config.jax`` array @@ -101,7 +106,7 @@ pushed into the queue: .. -6. Load the extension files: +7. Load the extension files: - Post the ``Begin Extensions`` startup signal - Load the files from the ``MathJax.Hub.config.extensions`` array @@ -114,20 +119,22 @@ pushed into the queue: .. -7. Set the MathJax menu's renderer value based on the jax that have been +8. Set the MathJax menu's renderer value based on the jax that have been loaded .. -8. Wait for the onload handler to fire +9. Wait for the onload handler to fire (in MathJax v2.0 this can + occur on the ``DOMContentLoaded`` event rather than the page's + ``onload`` event, so processing of mathematics can start earlier) .. -9. Set ``MathJax.isReady`` to ``true`` +10. Set ``MathJax.isReady`` to ``true`` .. -10. Perform the typesetting pass (preprocessors and processors) +11. Perform the typesetting pass (preprocessors and processors) - Post the ``Begin Typeset`` startup signal - Post the ``Begin PreProcess`` hub signal @@ -137,6 +144,12 @@ pushed into the queue: - Post the ``Begin Process`` hub signal - Process the math script elements on the page + - There are a number of Hub signals generated during math + processing, including a signal that a ``Math`` action is + starting (with a parameter indicating what action that is), + ``Begin`` and ``End Math Input`` messages, and ``Begin`` and + ``End Math Output`` signals. + - Each new math element generates a ``New Math`` hub signal with the math element's ID @@ -145,7 +158,18 @@ pushed into the queue: .. -11. Post the ``End`` startup signal +12. Jump to the location specified in the URL's hash reference, if + any. + +.. + +13. Initiate timers to load the zoom and menu code, if it hasn't + already been loading in the configuration (so it will be ready + when the user needs it). + +.. + +14. Post the ``End`` startup signal The loading of the jax and extensions in steps 5 and 6 are now done in @@ -157,4 +181,6 @@ followed by `Begin Extensions`, but the order of `End Jax` and `End Extensions` will depend on the files being loaded.) Both 5 and 6 must complete, however, before 7 will be performed. -See the ``test/sample-signals.html`` file to see the signals in action. +See the `test/sample-signals.html +<http://cdn.mathjax.org/mathjax/latest/test/sample-signals.html>`_ file +to see the signals in action. diff --git a/docs/html/_sources/synchronize.txt b/docs/html/_sources/synchronize.txt @@ -12,7 +12,7 @@ yet). Actions such as loading files, loading web-based fonts, and creating stylesheets all happen asynchronously within the browser, and since JavaScript has no method of halting a program while waiting for an action to complete, synchronizing your code with these types of -actions is made much more difficult. MathJax used three mechanisms to +actions is made much more difficult. MathJax uses three mechanisms to overcome this language shortcoming: callbacks, queues, and signals. **Callbacks** are functions that are called when an action is @@ -37,20 +37,23 @@ queues for actions that need to be synchronized with each other, but not to MathJax as a whole. See the :ref:`Queue Object <api-queue>` reference page for more details. -**Signals** are another means of synchronizing your own code with MathJax. -Many of the important actions that MathJax takes (like typesetting new math -on the page, or loading an external component) are "announced" by posting a -message to a special object called a `Signal`. Your code can register an -interest in receiving one or more of these signals by providing a callback -to be called when the signal is posted. When the signal arrives, MathJax -will call your code. This works somewhat like an event handler, except -that many different types of events can go through the same signal, and the -signals have a "memory", meaning that if you register an interest in a -particular type of signal and that signal has already occurred, you will be -told about the past occurrences as well as any future ones. See the -:ref:`Signal Object <api-signal>` reference page for more details. See -also the ``test/sample-signals.html`` file in the MathJax ``test`` -directory for a working example of using signals. +**Signals** are another means of synchronizing your own code with +MathJax. Many of the important actions that MathJax takes (like +typesetting new math on the page, or loading an external component) +are "announced" by posting a message to a special object called a +`Signal`. Your code can register an interest in receiving one or more +of these signals by providing a callback to be called when the signal +is posted. When the signal arrives, MathJax will call your code. +This works somewhat like an event handler, except that many different +types of events can go through the same signal, and the signals have a +"memory", meaning that if you register an interest in a particular +type of signal and that signal has already occurred, you will be told +about the past occurrences as well as any future ones. See the +:ref:`Signal Object <api-signal>` reference page for more details. +See also the `test/sample-signals.html +<http://cdn.mathjax.org/mathjax/latest/test/sample-signals.html>`_ +file in the MathJax ``test`` directory for a working example of using +signals. Each of these is explained in more detail in the links below: diff --git a/docs/html/_sources/typeset.txt b/docs/html/_sources/typeset.txt @@ -127,17 +127,28 @@ The actions you can perform on an element jax include: to set the math text of the element to `newmath` and typeset. + .. describe:: Rerender() + + to remove the output and reproduce it again (for example, if + CSS has changed that would alter the spacing of the + mathematics). Note that the internal representation isn't + regenerated; only the output is. + .. describe:: Reprocess() - to remove the output and reproduce it again (for - example, if CSS has changed that would alter the spacing of the - mathematics). + to remove the output and then retranslate the input into the + internal MathML and rerender the output. .. describe:: Remove() to remove the output for this math element (but not the original ``<script>`` tag). + .. describe:: needsUpdate() + + to find out if the mathematics has changed so that its output + needs to be updated. + .. describe:: SourceElement() to obtain a reference to the original @@ -161,7 +172,7 @@ queue. If your startup code performs the commands var studentDisplay = null; MathJax.Hub.Queue(function () { - studentDisplay = MathJax.Hub.getAllJax("MathDiv"); + studentDisplay = MathJax.Hub.getAllJax("MathDiv")[0]; }); then you can use @@ -173,8 +184,12 @@ then you can use to change the student's answer to be the typeset version of whatever is in the ``studentAnswer`` variable. -Here is a complete example that illustrates this approach (available in a -more full-featured version as ``test/sample-dynamic.html``): +Here is a complete example that illustrates this approach. Note, +however, that Internet Explorer does not fire the ``onchange`` event +when you press RETURN, so this example does not work as expected in +IE. A more full-featured version that addresses this problem is +available in `test/sample-dynamic.html +<http://cdn.mathjax.org/mathjax/latest/test/sample-dynamic.html>`_. .. code-block:: html @@ -232,3 +247,8 @@ more full-featured version as ``test/sample-dynamic.html``): </body> </html> + +There are a number of additional example pages at `test/examples.html +<http://cdn.mathjax.org/mathjax/latest/test/examples.html>`_ that +illustrate how to call MathJax dynamically or perform other actions +with MathJax. diff --git a/docs/html/_static/mathjax_mathml.user.js b/docs/html/_static/mathjax_mathml.user.js @@ -10,9 +10,9 @@ if ((window.unsafeWindow == null ? window : unsafeWindow).MathJax == null) { (document.getElementsByTagNameNS == null ? false : (document.getElementsByTagNameNS("http://www.w3.org/1998/Math/MathML","math").length > 0))) { var script = document.createElement("script"); + script.type = "text/javascript"; script.src = "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full"; var config = 'MathJax.Hub.Startup.onload()'; - if (window.opera) {script.innerHTML = config} else {script.text = config} document.getElementsByTagName("head")[0].appendChild(script); } } diff --git a/docs/html/_static/mathjax_wikipedia.user.js b/docs/html/_static/mathjax_wikipedia.user.js @@ -23,9 +23,8 @@ if ((window.unsafeWindow == null ? window : unsafeWindow).MathJax == null) { // Load MathJax and have it process the page // var script = document.createElement("script"); + script.type = "text/javascript"; script.src = "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full"; - var config = 'MathJax.Hub.Startup.onload()'; - if (window.opera) {script.innerHTML = config} else {script.text = config} document.getElementsByTagName("head")[0].appendChild(script); } } diff --git a/docs/html/api/callback.html b/docs/html/api/callback.html @@ -102,12 +102,12 @@ the window object. For example,</p> <p>would specify a callback that would pass <tt class="docutils literal"><span class="pre">2</span></tt> and <tt class="docutils literal"><span class="pre">3</span></tt> to the given function, and it would return their sum, <tt class="docutils literal"><span class="pre">5</span></tt>, when the callback is executed.</p> +</dd></dl> + <dl class="describe"> <dt> <tt class="descname">[object, fn]</tt></dt> -<dd></dd></dl> - -<p>An array containing an object to use as <cite>this</cite> and a function to +<dd><p>An array containing an object to use as <cite>this</cite> and a function to call for the callback. For example,</p> <div class="highlight-javascript"><div class="highlight"><pre><span class="p">[{</span><span class="nx">x</span><span class="o">:</span><span class="s1">&#39;foo&#39;</span><span class="p">,</span> <span class="nx">y</span><span class="o">:</span><span class="s1">&#39;bar&#39;</span><span class="p">},</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span><span class="k">this</span><span class="p">.</span><span class="nx">x</span><span class="p">}]</span> </pre></div> @@ -123,9 +123,10 @@ when it is called.</p> the function as well.</p> </dd></dl> -<p>..describe:: [&#8220;method&#8221;, object]</p> -<blockquote> -<div><p>Here, <cite>object</cite> is an object that has a method called <cite>method</cite>, and +<dl class="describe"> +<dt> +<tt class="descname">[&quot;method&quot;, object]</tt></dt> +<dd><p>Here, <cite>object</cite> is an object that has a method called <cite>method</cite>, and the callback will execute that method (with the object as <cite>this</cite>) when it is called. For example,</p> <div class="highlight-javascript"><div class="highlight"><pre><span class="p">[</span><span class="s2">&quot;toString&quot;</span><span class="p">,[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">]]</span> @@ -133,7 +134,8 @@ the callback will execute that method (with the object as </div> <p>would call the <cite>toString</cite> method on the array <tt class="docutils literal"><span class="pre">[1,2,3,4]</span></tt> when the callback is called, returning <tt class="docutils literal"><span class="pre">1,2,3,4</span></tt>.</p> -</div></blockquote> +</dd></dl> + <dl class="describe"> <dt> <tt class="descname">[&quot;method&quot;, object, data...]</tt></dt> @@ -289,6 +291,50 @@ commands.</p> </dd></dl> <dl class="method"> +<dt id="Queue"> +<tt class="descname">Queue</tt><big>(</big><span class="optional">[</span><em>callback</em>, <em>...</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#Queue" title="Permalink to this definition">¶</a></dt> +<dd><p>Creates a <cite>MathJax.CallBack.Queue</cite> object and pushes the given +callbacks into the queue. See <a class="reference internal" href="../queues.html#using-queues"><em>Using Queues</em></a> +for more details about MathJax queues.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first simple"> +<li><strong>callback</strong> &#8212; one or more callback specifications</li> +</ul> +</td> +</tr> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last">the <cite>Queue</cite> object</p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="Signal"> +<tt class="descname">Signal</tt><big>(</big><em>name</em><big>)</big><a class="headerlink" href="#Signal" title="Permalink to this definition">¶</a></dt> +<dd><p>Looks for a named signal, creates it if it doesn&#8217;t already exist, +and returns the signal object. See +<a class="reference internal" href="../signals.html#using-signals"><em>Using Signals</em></a> for more details.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first simple"> +<li><strong>name</strong> &#8212; name of the signal to get or create</li> +</ul> +</td> +</tr> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last">the <cite>Signal</cite> object</p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> <dt id="ExecuteHooks"> <tt class="descname">ExecuteHooks</tt><big>(</big><em>hooks</em><span class="optional">[</span>, <em>data</em><span class="optional">[</span>, <em>reset</em><span class="optional">]</span><span class="optional">]</span><big>)</big><a class="headerlink" href="#ExecuteHooks" title="Permalink to this definition">¶</a></dt> <dd><p>Calls each callback in the <cite>hooks</cite> array (or the single hook if it @@ -319,21 +365,45 @@ returns <tt class="docutils literal"><span class="pre">null</span></tt>.</p> </dd></dl> <dl class="method"> -<dt id="Queue"> -<tt class="descname">Queue</tt><big>(</big><span class="optional">[</span><em>callback</em>, <em>...</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#Queue" title="Permalink to this definition">¶</a></dt> -<dd><p>Creates a <cite>MathJax.CallBack.Queue</cite> object and pushes the given -callbacks into the queue. See <a class="reference internal" href="../queues.html#using-queues"><em>Using Queues</em></a> -for more details about MathJax queues.</p> +<dt id="Hooks"> +<tt class="descname">Hooks</tt><big>(</big><em>reset</em><big>)</big><a class="headerlink" href="#Hooks" title="Permalink to this definition">¶</a></dt> +<dd><p>Creates a prioritized list of hooks that are called in order based +on their priority (low priority numbers are handled first). This +is meant to replace <tt class="xref py py-meth docutils literal"><span class="pre">MathJax.Callback.ExecuteHooks()</span></tt> and is +used internally for signal callbacks, pre- and post-filters, and +other lists of callbacks.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> <tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first simple"> -<li><strong>callback</strong> &#8212; one or more callback specifications</li> +<li><strong>reset</strong> &#8212; <tt class="docutils literal"><span class="pre">true</span></tt> if callbacks can be called more than once</li> </ul> </td> </tr> -<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last">the <cite>Queue</cite> object</p> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last">the <cite>Hooks</cite> object</p> +</td> +</tr> +</tbody> +</table> +<p>The list has the following methods:</p> +<dl class="method"> +<dt id="Add"> +<tt class="descname">Add</tt><big>(</big><em>hook</em><span class="optional">[</span>, <em>priority</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#Add" title="Permalink to this definition">¶</a></dt> +<dd><p>Add a callback to the prioritized list. If <tt class="docutils literal"><span class="pre">priority</span></tt> is +not provided, the default is 10. The <tt class="docutils literal"><span class="pre">hook</span></tt> is a <cite>Callback</cite> +specification as described above.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first simple"> +<li><strong>hook</strong> &#8212; callback specification to add to the list</li> +<li><strong>priority</strong> &#8212; priority of the hook in the list (default: 10)</li> +</ul> +</td> +</tr> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last">the callback object being added</p> </td> </tr> </tbody> @@ -341,27 +411,45 @@ for more details about MathJax queues.</p> </dd></dl> <dl class="method"> -<dt id="Signal"> -<tt class="descname">Signal</tt><big>(</big><em>name</em><big>)</big><a class="headerlink" href="#Signal" title="Permalink to this definition">¶</a></dt> -<dd><p>Looks for a named signal, creates it if it doesn&#8217;t already exist, -and returns the signal object. See -<a class="reference internal" href="../signals.html#using-signals"><em>Using Signals</em></a> for more details.</p> +<dt> +<tt class="descname">Remove</tt><big>(</big><em>hook</em><big>)</big></dt> +<dd><p>Remove a given hook (as returned from <a class="reference internal" href="#Add" title="Add"><tt class="xref py py-meth docutils literal"><span class="pre">Add()</span></tt></a> above) +from the prioritized list.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> <tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first simple"> -<li><strong>name</strong> &#8212; name of the signal to get or create</li> +<li><strong>hook</strong> &#8212; the callback to be removed</li> </ul> </td> </tr> -<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last">the <cite>Signal</cite> object</p> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last"><tt class="docutils literal"><span class="pre">null</span></tt></p> </td> </tr> </tbody> </table> </dd></dl> +<dl class="method"> +<dt id="Execute"> +<tt class="descname">Execute</tt><big>(</big><big>)</big><a class="headerlink" href="#Execute" title="Permalink to this definition">¶</a></dt> +<dd><p>Execute the list of callbacks, resetting them if requested. +If any of the hooks return callbacks, then <tt class="docutils literal"><span class="pre">Execute()</span></tt> +returns a callback that will be executed when they all have +completed.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body">a callback object or <tt class="docutils literal"><span class="pre">null</span></tt></td> +</tr> +</tbody> +</table> +</dd></dl> + +</dd></dl> + </div> </div> diff --git a/docs/html/api/elementjax.html b/docs/html/api/elementjax.html @@ -91,15 +91,13 @@ that class.</p> <dl class="describe"> <dt> <tt class="descname">inputJax</tt></dt> -<dd><p>A reference to the input jax that created the element. (In the -future, this will be changed to the name of the input jax.)</p> +<dd><p>The name of the input jax that created the element.</p> </dd></dl> <dl class="describe"> <dt> <tt class="descname">outputJax</tt></dt> -<dd><p>A reference to the output jax that has processed this element. (In -the future, this will be changed to the name of the output jax.)</p> +<dd><p>The name of the output jax that has processed this element.</p> </dd></dl> <dl class="describe"> @@ -159,11 +157,34 @@ new one given by <cite>text</cite>). When the processing is complete, the <dl class="method"> <dt> +<tt class="descname">Rerender</tt><big>(</big><span class="optional">[</span><em>callback</em><span class="optional">]</span><big>)</big></dt> +<dd><p>Removes the output and produces it again (for example, if CSS has +changed that would alter the spacing of the mathematics). Note +that the internal representation isn&#8217;t regenerated; only the +output is. The <cite>callback</cite>, if any, is called when the process +completes.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first simple"> +<li><strong>callback</strong> &#8212; the callback specification</li> +</ul> +</td> +</tr> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last">the callback object</p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt> <tt class="descname">Reprocess</tt><big>(</big><span class="optional">[</span><em>callback</em><span class="optional">]</span><big>)</big></dt> -<dd><p>Removes the output and produces it again. This may be necessary if -there are changes to the CSS styles that would affect the layout -of the mathematics, for example. The <cite>callback</cite>, if any, is -called when the process completes.</p> +<dd><p>Removes the output and then retranslates the input into the +internal form and reredners the output again. The <cite>callback</cite>, if +any, is called when the process completes.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> @@ -212,6 +233,22 @@ associated to this element jax.</p> </table> </dd></dl> +<dl class="method"> +<dt id="needsUpdate"> +<tt class="descname">needsUpdate</tt><big>(</big><big>)</big><a class="headerlink" href="#needsUpdate" title="Permalink to this definition">¶</a></dt> +<dd><p>Indicates whether the mathematics has changed so that its output +needs to be updated.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><tt class="docutils literal"><span class="pre">true</span></tt> if the mathematics needs to be reprocessed, +<tt class="docutils literal"><span class="pre">false</span></tt> otherwise</td> +</tr> +</tbody> +</table> +</dd></dl> + <p>Output jax may add new methods to the base element jax class to perform exporting to other formats. For example, a MathML output jax could add <tt class="docutils literal"><span class="pre">toMathML()</span></tt>, or an accessibility output jax could add diff --git a/docs/html/api/html.html b/docs/html/api/html.html @@ -199,6 +199,27 @@ bugs.</p> </table> </dd></dl> +<dl class="method"> +<dt id="getScript"> +<tt class="descname">getScript</tt><big>(</big><em>script</em><big>)</big><a class="headerlink" href="#getScript" title="Permalink to this definition">¶</a></dt> +<dd><p>Gets the contents of the <tt class="docutils literal"><span class="pre">script</span></tt> element, properly taking into +account the browser limitations and bugs.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first simple"> +<li><strong>script</strong> &#8212; the script whose content is to be retrieved</li> +</ul> +</td> +</tr> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last">the text of the <tt class="docutils literal"><span class="pre">script</span></tt></p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + <dl class="describe"> <dt> <tt class="descname">Cookie.Set(name,data)</tt></dt> diff --git a/docs/html/api/hub.html b/docs/html/api/hub.html @@ -79,7 +79,19 @@ Options</em></a> reference page.</p> <dt> <tt class="descname">processUpdateTime: 250</tt></dt> <dd><p>The minimum time (in milliseconds) between updates of the -&#8220;Processing Math&#8221; message.</p> +&#8220;Processing Math&#8221; message. After this amount of time has passed, +and after the next equation has finished being processed, +MathJax will stop processing momentarily so that the update +message can be displayed, and so that the browser can handle user +interaction.</p> +</dd></dl> + +<dl class="describe"> +<dt> +<tt class="descname">processUpdateDelay: 10</tt></dt> +<dd><p>The amount of time (in milliseconds) that MathJax pauses after +issuing its processing message before starting the processing again +(to give browsers time to handle user interaction).</p> </dd></dl> <dl class="describe"> @@ -119,6 +131,13 @@ will both be <tt class="docutils literal"><span class="pre">false</span></tt> fo <dl class="describe"> <dt> +<tt class="descname">isMobile</tt></dt> +<dd><p>This is <tt class="docutils literal"><span class="pre">true</span></tt> when MathJax is running a mobile version of a +WebKit or Gecko-based browser.</p> +</dd></dl> + +<dl class="describe"> +<dt> <tt class="descname">isFirefox, isSafari, isChrome, isOpera, isMSIE, isKonqueror</tt></dt> <dd><p>These are <tt class="docutils literal"><span class="pre">true</span></tt> when the browser is the indicated one, and <tt class="docutils literal"><span class="pre">false</span></tt> otherwise.</p> @@ -161,6 +180,21 @@ need to do special processing. For example:</p> </dd></dl> +<dl class="describe"> +<dt> +<tt class="descname">inputJax</tt></dt> +<dd><p>An object storing the MIME types associated with the various +registered input jax (these are the types of the <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> tags +that store the math to be processed by each input jax).</p> +</dd></dl> + +<dl class="describe"> +<dt> +<tt class="descname">outputJax</tt></dt> +<dd><p>An object storing the output jax associate with the various +element jax MIME types for the registered output jax.</p> +</dd></dl> + </div> <div class="section" id="methods"> <h2>Methods<a class="headerlink" href="#methods" title="Permalink to this headline">¶</a></h2> @@ -434,13 +468,43 @@ references. The <cite>callback</cite> is called when the processing is complete <dl class="method"> <dt id="Reprocess"> <tt class="descname">Reprocess</tt><big>(</big><span class="optional">[</span><em>element</em><span class="optional">[</span>, <em>callback</em><span class="optional">]</span><span class="optional">]</span><big>)</big><a class="headerlink" href="#Reprocess" title="Permalink to this definition">¶</a></dt> -<dd><p>Removes any typeset mathematics from the document or DOM element (or -elements if it is an array of elements), and then processes the -mathematics again, re-typesetting everything. This may be necessary, -for example, if the CSS styles have changed and those changes would -affect the mathematics. The <cite>element</cite> is either the DOM <cite>id</cite> of the -element to scan, a reference to the DOM element itself, or an array of -id&#8217;s or references. The <cite>callback</cite> is called when the processing is +<dd><p>Removes any typeset mathematics from the document or DOM element +(or elements if it is an array of elements), and then processes +the mathematics again, re-typesetting everything. This may be +necessary, for example, if the CSS styles have changed and those +changes would affect the mathematics. Reprocess calls both the +input and output jax to completely rebuild the data for +mathematics. The <cite>element</cite> is either the DOM <cite>id</cite> of the element +to scan, a reference to the DOM element itself, or an array of +id&#8217;s or references. The <cite>callback</cite> is called when the processing +is complete.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first simple"> +<li><strong>element</strong> &#8212; the element(s) to be reprocessed</li> +<li><strong>callback</strong> &#8212; the callback specification</li> +</ul> +</td> +</tr> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last">the callback object</p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="Rerender"> +<tt class="descname">Rerender</tt><big>(</big><span class="optional">[</span><em>element</em><span class="optional">[</span>, <em>callback</em><span class="optional">]</span><span class="optional">]</span><big>)</big><a class="headerlink" href="#Rerender" title="Permalink to this definition">¶</a></dt> +<dd><p>Removes any typeset mathematics from the document or DOM element +(or elements if it is an array of elements), and then renders the +mathematics again, re-typesetting everything from the current +internal version (without calling the input jax again). The +<cite>element</cite> is either the DOM <cite>id</cite> of the element to scan, a +reference to the DOM element itself, or an array of id&#8217;s or +references. The <cite>callback</cite> is called when the processing is complete.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> @@ -578,6 +642,33 @@ handled by MathJax, and returns <tt class="docutils literal"><span class="pre">1 </dd></dl> <dl class="method"> +<dt id="setRenderer"> +<tt class="descname">setRenderer</tt><big>(</big><em>renderer</em><span class="optional">[</span>, <em>type</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#setRenderer" title="Permalink to this definition">¶</a></dt> +<dd><p>Sets the output jax for the given element jax <tt class="docutils literal"><span class="pre">type</span></tt> (or <tt class="docutils literal"><span class="pre">jax/mml</span></tt> +if none is specified) to be the one given by <tt class="docutils literal"><span class="pre">renderer</span></tt>, which +must be the name of a renderer, such as <tt class="docutils literal"><span class="pre">NativeMML</span></tt> or +<tt class="docutils literal"><span class="pre">HTML-CSS</span></tt>. Note that this does not cause the math on the page +to be rerendered; it just sets the renderer for output in the +future (call :meth:<tt class="docutils literal"><span class="pre">Rerender()</span></tt> above to replace the current +renderings by new ones).</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first simple"> +<li><strong>renderer</strong> &#8212; the name of the output jax to use for rendering</li> +<li><strong>type</strong> &#8212; the element jax MIME type whose renderer to set</li> +</ul> +</td> +</tr> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last"><tt class="docutils literal"><span class="pre">null</span></tt></p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> <dt id="Insert"> <tt class="descname">Insert</tt><big>(</big><em>dst</em>, <em>src</em><big>)</big><a class="headerlink" href="#Insert" title="Permalink to this definition">¶</a></dt> <dd><p>Inserts data from the <cite>src</cite> object into the <cite>dst</cite> object. The diff --git a/docs/html/api/inputjax.html b/docs/html/api/inputjax.html @@ -107,11 +107,57 @@ that class.</p> <h2>Methods<a class="headerlink" href="#methods" title="Permalink to this headline">¶</a></h2> <dl class="method"> <dt> -<tt class="descname">Translate</tt><big>(</big><em>script</em><big>)</big></dt> +<tt class="descname">Process</tt><big>(</big><em>script</em>, <em>state</em><big>)</big></dt> +<dd><p>This is the method that the <tt class="docutils literal"><span class="pre">MathJax.Hub</span></tt> calls when it needs +the input jax to process the given math <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt>. Its default +action is to do the following:</p> +<ol class="arabic simple"> +<li>Start loading any element jax specified in the <tt class="docutils literal"><span class="pre">elementJax</span></tt> array;</li> +<li>Start loading the jax&#8217;s <tt class="docutils literal"><span class="pre">jax.js</span></tt> file;</li> +<li>Start loading the required output jax (so it is ready when needed); and</li> +<li>Redefine itself to simply return the callback for the load operation +(so that further calls to it will cause the processing to wait for the +callback).</li> +</ol> +<p>Once the <tt class="docutils literal"><span class="pre">jax.js</span></tt> file has loaded, this method is replaced by +the jax&#8217;s <tt class="docutils literal"><span class="pre">Translate()</span></tt> method (see below), so that +subsequent calls to <tt class="docutils literal"><span class="pre">Process()</span></tt> will perform the appropriate +translation.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first"> +<li><dl class="first docutils"> +<dt><strong>script</strong> &#8212; reference to the DOM <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> object for</dt> +<dd><p class="first last">the mathematics to be translated</p> +</dd> +</dl> +</li> +<li><dl class="first docutils"> +<dt><strong>state</strong> &#8212; a structure containing information about the</dt> +<dd><p class="first last">current proccessing state of the mathematics +(internal use)</p> +</dd> +</dl> +</li> +</ul> +</td> +</tr> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last">an <cite>ElementJax</cite> object, or <tt class="docutils literal"><span class="pre">null</span></tt></p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt> +<tt class="descname">Translate</tt><big>(</big><em>script</em>, <em>state</em><big>)</big></dt> <dd><p>This is the main routine called by MathJax when a <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> of the appropriate type is found. The default <a class="reference internal" href="jax.html#Translate" title="Translate"><tt class="xref py py-meth docutils literal"><span class="pre">Translate()</span></tt></a> method throws an error indicating that <a class="reference internal" href="jax.html#Translate" title="Translate"><tt class="xref py py-meth docutils literal"><span class="pre">Translate()</span></tt></a> hasn&#8217;t been -redefined, so when the <tt class="docutils literal"><span class="pre">jax.js</span></tt> file loads, it should override the +defined, so when the <tt class="docutils literal"><span class="pre">jax.js</span></tt> file loads, it should override the default <a class="reference internal" href="jax.html#Translate" title="Translate"><tt class="xref py py-meth docutils literal"><span class="pre">Translate()</span></tt></a> with its own version that does the actual translation.</p> <p>The translation process should include the creation of an @@ -121,8 +167,16 @@ for this element.</p> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first simple"> -<li><strong>script</strong> &#8212; the <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> element to be translated</li> +<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first"> +<li><p class="first"><strong>script</strong> &#8212; the <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> element to be translated</p> +</li> +<li><dl class="first docutils"> +<dt><strong>state</strong> &#8212; a structure containing information about the</dt> +<dd><p class="first last">current proccessing state of the mathematics +(internal use)</p> +</dd> +</dl> +</li> </ul> </td> </tr> @@ -157,6 +211,28 @@ of the various types from one another.</p> </table> </dd></dl> +<dl class="method"> +<dt> +<tt class="descname">needsUpdate</tt><big>(</big><em>jax</em><big>)</big></dt> +<dd><p>This implements the element jax&#8217;s <tt class="docutils literal"><span class="pre">needsUpdate()</span></tt> method, and +returns <tt class="docutils literal"><span class="pre">true</span></tt> if the <tt class="docutils literal"><span class="pre">jax</span></tt> needs to be rerendered (i.e., the +text has changed), and <tt class="docutils literal"><span class="pre">false</span></tt> otherwise.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field"><th class="field-name">Perameters :</th><td class="field-body"><ul class="first simple"> +<li><strong>jax</strong> &#8212; the element jax to be checked</li> +</ul> +</td> +</tr> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last"><tt class="docutils literal"><span class="pre">true</span></tt> if the jax&#8217;s text has changed, <tt class="docutils literal"><span class="pre">false</span></tt> otherwise</p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + </div> </div> diff --git a/docs/html/api/jax.html b/docs/html/api/jax.html @@ -119,41 +119,15 @@ jax. These can be modified by the author by including a configuration subsection for the specific jax in question.</p> </dd></dl> -</div> -<div class="section" id="methods"> -<h2>Methods<a class="headerlink" href="#methods" title="Permalink to this headline">¶</a></h2> -<dl class="method"> +<dl class="describe"> <dt> -<tt class="descname">Process</tt><big>(</big><em>script</em><big>)</big></dt> -<dd><p>This is the method that the <tt class="docutils literal"><span class="pre">MathJax.Hub</span></tt> calls when it needs the -input or output jax to process the given math <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt>. Its -default action is to start loading the jax&#8217;s <tt class="docutils literal"><span class="pre">jax.js</span></tt> file, and -redefine itself to simply return the callback for the load operation -(so that further calls to it will cause the processing to wait for the -callback). Once the <tt class="docutils literal"><span class="pre">jax.js</span></tt> file has loaded, this method is -replaced by the jax&#8217;s <a class="reference internal" href="#Translate" title="Translate"><tt class="xref py py-meth docutils literal"><span class="pre">Translate()</span></tt></a> method, so that subsequent calls -to <a class="reference internal" href="hub.html#Process" title="Process"><tt class="xref py py-meth docutils literal"><span class="pre">Process()</span></tt></a> will perform the appropriate translation.</p> -<table class="docutils field-list" frame="void" rules="none"> -<col class="field-name" /> -<col class="field-body" /> -<tbody valign="top"> -<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first"> -<li><dl class="first docutils"> -<dt><strong>script</strong> &#8212; reference to the DOM <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> object for</dt> -<dd><p class="first last">the mathematics to be translated</p> -</dd> -</dl> -</li> -</ul> -</td> -</tr> -<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last">an <cite>ElementJax</cite> object, or <tt class="docutils literal"><span class="pre">null</span></tt></p> -</td> -</tr> -</tbody> -</table> +<tt class="descname">JAXFILE: &quot;jax.js&quot;</tt></dt> +<dd><p>The name of the file that contains the main code for the jax.</p> </dd></dl> +</div> +<div class="section" id="methods"> +<h2>Methods<a class="headerlink" href="#methods" title="Permalink to this headline">¶</a></h2> <dl class="method"> <dt id="Translate"> <tt class="descname">Translate</tt><big>(</big><em>script</em><big>)</big><a class="headerlink" href="#Translate" title="Permalink to this definition">¶</a></dt> @@ -161,7 +135,7 @@ to <a class="reference internal" href="hub.html#Process" title="Process"><tt cla <tt class="docutils literal"><span class="pre">jax.js</span></tt> file when it is loaded. It should perform the translation action for the specific jax. For an input jax, it should return the <cite>ElementJax</cite> object that it created. The <a class="reference internal" href="#Translate" title="Translate"><tt class="xref py py-meth docutils literal"><span class="pre">Translate()</span></tt></a> method is -never called directly by MathJax; during the <a class="reference internal" href="ajax.html#loadComplete" title="loadComplete"><tt class="xref py py-meth docutils literal"><span class="pre">loadComplete()</span></tt></a> +never called directly by MathJax; during the <tt class="docutils literal"><span class="pre">loadComplete()</span></tt> call, this function is copied to the <a class="reference internal" href="hub.html#Process" title="Process"><tt class="xref py py-meth docutils literal"><span class="pre">Process()</span></tt></a> method, and is called via that name. The default <a class="reference internal" href="#Translate" title="Translate"><tt class="xref py py-meth docutils literal"><span class="pre">Translate()</span></tt></a> method throws an error indicating that the <a class="reference internal" href="#Translate" title="Translate"><tt class="xref py py-meth docutils literal"><span class="pre">Translate()</span></tt></a> method was not @@ -249,6 +223,9 @@ following:</p> <li>Post the &#8220;[name] Jax Startup&#8221; message to the startup signal.</li> <li>Perform the jax&#8217;s <a class="reference internal" href="#Startup" title="Startup"><tt class="xref py py-meth docutils literal"><span class="pre">Startup()</span></tt></a> method.</li> <li>Post the &#8220;[name] Jax Ready&#8221; message to the startup signal.</li> +<li>Copy the <tt class="docutils literal"><span class="pre">preTranslate</span></tt>, <tt class="docutils literal"><span class="pre">Translate</span></tt>, and +<tt class="docutils literal"><span class="pre">postTranslate</span></tt> functions to <tt class="docutils literal"><span class="pre">preProcess</span></tt>, <tt class="docutils literal"><span class="pre">Process</span></tt>, +and <tt class="docutils literal"><span class="pre">postProcess</span></tt>.</li> <li>Perform the <tt class="xref py py-meth docutils literal"><span class="pre">MathJax.Ajax.loadComplete()</span></tt> call for the <tt class="docutils literal"><span class="pre">jax.js</span></tt> file.</li> </ol> diff --git a/docs/html/api/outputjax.html b/docs/html/api/outputjax.html @@ -96,29 +96,121 @@ that class.</p> <dd><p>The directory where the jax files are stored (e.g., <tt class="docutils literal"><span class="pre">&quot;[MathJax]/jax/output/HTML-CSS&quot;</span></tt>);</p> </dd></dl> +<dl class="describe"> +<dt> +<tt class="descname">fontDir</tt></dt> +<dd><p>The directory where the fonts are stored (e.g., <tt class="docutils literal"><span class="pre">&quot;[MathJax]/fonts&quot;</span></tt>)</p> +</dd></dl> + +<dl class="describe"> +<dt> +<tt class="descname">imageDir</tt></dt> +<dd><p>The directory where MathJax images are found (e.g. <tt class="docutils literal"><span class="pre">&quot;[MathJax]/images&quot;</span></tt>)</p> +</dd></dl> + </div> <div class="section" id="methods"> <h2>Methods<a class="headerlink" href="#methods" title="Permalink to this headline">¶</a></h2> <dl class="method"> +<dt id="preProcess"> +<tt class="descname">preProcess</tt><big>(</big><em>state</em><big>)</big><a class="headerlink" href="#preProcess" title="Permalink to this definition">¶</a></dt> +<dd><p>This is called by <tt class="docutils literal"><span class="pre">MathJax.Hub</span></tt> to ask the output processor to +prepare to process math scripts. Its default action is to start +loading the jax&#8217;s <tt class="docutils literal"><span class="pre">jax.js</span></tt> file, and redefine itself to simply +return the callback for the load operation (so that further calls +to it will cause the processing to wait for the callback).</p> +<p>Once the <tt class="docutils literal"><span class="pre">jax.js</span></tt> file has loaded, this method is replaced by +the jax&#8217;s <a class="reference internal" href="#preTranslate" title="preTranslate"><tt class="xref py py-meth docutils literal"><span class="pre">preTranslate()</span></tt></a> method, so that subsequent calls +to <a class="reference internal" href="#preProcess" title="preProcess"><tt class="xref py py-meth docutils literal"><span class="pre">preProcess()</span></tt></a> will perform the appropriate translation.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first"> +<li><dl class="first docutils"> +<dt><strong>state</strong> &#8212; a structure containing information about the</dt> +<dd><p class="first last">current proccessing state of the mathematics</p> +</dd> +</dl> +</li> +</ul> +</td> +</tr> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last"><tt class="docutils literal"><span class="pre">null</span></tt></p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="preTranslate"> +<tt class="descname">preTranslate</tt><big>(</big><em>state</em><big>)</big><a class="headerlink" href="#preTranslate" title="Permalink to this definition">¶</a></dt> +<dd><p>This routine replaces <a class="reference internal" href="#preProcess" title="preProcess"><tt class="xref py py-meth docutils literal"><span class="pre">preProcess()</span></tt></a> above when the jax&#8217;s +<tt class="docutils literal"><span class="pre">jax.js</span></tt> file is loaded. It is called by <tt class="docutils literal"><span class="pre">MathJax.Hub</span></tt> to ask +the output processor to prepare to process math scripts. (For +example, the HTML-CSS output jax uses this to determine em-sizes +for all the mathematics at once, to minimize page reflows that +slow down Internet Explorer.)</p> +<p>The routine can use <tt class="docutils literal"><span class="pre">state.jax[this.id]</span></tt> to obtain the array of +element jax that are to be processed. The output jax can use the +<tt class="docutils literal"><span class="pre">state</span></tt> variable to maintain its own state information, but +any properties that it adds to the variable should have a prefix +that is the output jax&#8217;s ID. For example, the HTML-CSS output jax +might use <tt class="docutils literal"><span class="pre">state.HTMLCSSlast</span></tt> to keep track of the last equation +it processed, or could add <tt class="docutils literal"><span class="pre">state.HTMLCSS</span> <span class="pre">=</span> <span class="pre">{...}</span></tt> to create an +object of its own within the state variable.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first"> +<li><dl class="first docutils"> +<dt><strong>state</strong> &#8212; a structure containing information about the</dt> +<dd><p class="first last">current proccessing state of the mathematics</p> +</dd> +</dl> +</li> +</ul> +</td> +</tr> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last"><tt class="docutils literal"><span class="pre">null</span></tt></p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> <dt> -<tt class="descname">Translate</tt><big>(</big><em>script</em><big>)</big></dt> +<tt class="descname">Translate</tt><big>(</big><em>script</em>, <em>state</em><big>)</big></dt> <dd><p>This is the main routine called by MathJax when an element jax is to be converted to output. The default <a class="reference internal" href="jax.html#Translate" title="Translate"><tt class="xref py py-meth docutils literal"><span class="pre">Translate()</span></tt></a> method throws an error indicating that <a class="reference internal" href="jax.html#Translate" title="Translate"><tt class="xref py py-meth docutils literal"><span class="pre">Translate()</span></tt></a> hasn&#8217;t been -redefined, so when the <tt class="docutils literal"><span class="pre">jax.js</span></tt> file loads, it should override the +defined, so when the <tt class="docutils literal"><span class="pre">jax.js</span></tt> file loads, it should override the default <a class="reference internal" href="jax.html#Translate" title="Translate"><tt class="xref py py-meth docutils literal"><span class="pre">Translate()</span></tt></a> with its own version that does the actual translation.</p> <p>You should use <tt class="docutils literal"><span class="pre">MathJax.Hub.getJaxFor(script)</span></tt> to obtain the element jax for the given script. The translation process may modify the element jax (e.g., if it has data that needs to be stored with the jax), and may insert DOM elements into the -document near the jax&#8217;s <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> tag.</p> +document near the jax&#8217;s <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> tag. The output jax can use +the <tt class="docutils literal"><span class="pre">state</span></tt> variable to maintain information about its +processing state, but see <a class="reference internal" href="#preTranslate" title="preTranslate"><tt class="xref py py-meth docutils literal"><span class="pre">preTranslate()</span></tt></a> above for naming +conventions for properties that are added.</p> <table class="docutils field-list" frame="void" rules="none"> <col class="field-name" /> <col class="field-body" /> <tbody valign="top"> -<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first simple"> -<li><strong>script</strong> &#8212; the <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> element to be translated</li> +<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first"> +<li><p class="first"><strong>script</strong> &#8212; the <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> element to be translated</p> +</li> +<li><dl class="first docutils"> +<dt><strong>state</strong> &#8212; a structure containing information about the</dt> +<dd><p class="first last">current proccessing state of the mathematics</p> +</dd> +</dl> +</li> </ul> </td> </tr> @@ -130,6 +222,39 @@ document near the jax&#8217;s <tt class="docutils literal"><span class="pre">&lt </dd></dl> <dl class="method"> +<dt id="postTranslate"> +<tt class="descname">postTranslate</tt><big>(</big><em>state</em><big>)</big><a class="headerlink" href="#postTranslate" title="Permalink to this definition">¶</a></dt> +<dd><p>This routines is called by <tt class="docutils literal"><span class="pre">MathJax.Hub</span></tt> when the translation +of math elements is complete, and can be used by the output +processor to finalize any actions that it needs to complete. +(For example, making the mathematics visible, or forcing a reflow +of the page.)</p> +<p>The routine can use <tt class="docutils literal"><span class="pre">state.jax[this.id]</span></tt> to obtain the array of +element jax that were processed, or can use the <tt class="docutils literal"><span class="pre">state</span></tt> variable +to store its own state information (see <a class="reference internal" href="#preProcess" title="preProcess"><tt class="xref py py-meth docutils literal"><span class="pre">preProcess()</span></tt></a> +above for caveats about naming properties).</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first"> +<li><dl class="first docutils"> +<dt><strong>state</strong> &#8212; a structure containing information about the</dt> +<dd><p class="first last">current proccessing state of the mathematics</p> +</dd> +</dl> +</li> +</ul> +</td> +</tr> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last"><tt class="docutils literal"><span class="pre">null</span></tt></p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> <dt> <tt class="descname">Register</tt><big>(</big><em>mimetype</em><big>)</big></dt> <dd><p>This registers the MIME-type for the element jax associated with @@ -175,6 +300,88 @@ tag associated with the element jax.</p> </table> </dd></dl> +<p>If an output jax wants its output to handle the contextual menu item +and zooming, then it needs to tie into the event-handling code +(<cite>MathEvents</cite>) and the zoom-handling code (<cite>MathZoom</cite>). That requires +the following methods.</p> +<dl class="method"> +<dt id="getJaxFromMath"> +<tt class="descname">getJaxFromMath</tt><big>(</big><em>math</em><big>)</big><a class="headerlink" href="#getJaxFromMath" title="Permalink to this definition">¶</a></dt> +<dd><p>This is called by the event-handling code (<cite>MathEvents</cite>) to get +the element jax associated with the DOM element that caused an +event to occur. The output jax will have attached event handlers +to some DOM element that is part of its output, and the +<cite>MathEvents</cite> code uses this routine to map back to the jax +associated with that output.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first"> +<li><dl class="first docutils"> +<dt><strong>math</strong> &#8212; a DOM element that triggered a DOM event</dt> +<dd><p class="first last">(e.g., a mouse click)</p> +</dd> +</dl> +</li> +</ul> +</td> +</tr> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last">the <cite>ElementJax</cite> structure associated with the DOM element</p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + +<dl class="method"> +<dt id="Zoom"> +<tt class="descname">Zoom</tt><big>(</big><em>jax</em>, <em>span</em>, <em>math</em>, <em>Mw</em>, <em>Mh</em><big>)</big><a class="headerlink" href="#Zoom" title="Permalink to this definition">¶</a></dt> +<dd><p>This routine is called by the zoom-handling code (<cite>MathZoom</cite>) +when an expression has received its zoom trigger event (e.g., a +double-click). The <tt class="docutils literal"><span class="pre">jax</span></tt> is the math that needs to be zoomed, +<tt class="docutils literal"><span class="pre">span</span></tt> is a <tt class="docutils literal"><span class="pre">&lt;span&gt;</span></tt> element in which the zoomed version of +the math should be placed, <tt class="docutils literal"><span class="pre">math</span></tt> is the DOM element that +received the zoom trigger event, and <tt class="docutils literal"><span class="pre">Mw</span></tt> and <tt class="docutils literal"><span class="pre">Mh</span></tt> are the +maximum width and height allowed for the zoom box (the <tt class="docutils literal"><span class="pre">span</span></tt>).</p> +<p>The return value is an object with the following properties:</p> +<ul> +<li><dl class="first docutils"> +<dt><tt class="docutils literal"><span class="pre">Y</span></tt> &#8212; the vertical offset from the top of the <tt class="docutils literal"><span class="pre">span</span></tt> to</dt> +<dd><p class="first last">the baseline of the mathematics</p> +</dd> +</dl> +</li> +<li><p class="first"><tt class="docutils literal"><span class="pre">mW</span></tt> &#8212; the width of the original mathematics element</p> +</li> +<li><p class="first"><tt class="docutils literal"><span class="pre">mH</span></tt> &#8212; the height of the original mathematics element</p> +</li> +<li><p class="first"><tt class="docutils literal"><span class="pre">zW</span></tt> &#8212; the width of the zoomed math</p> +</li> +<li><p class="first"><tt class="docutils literal"><span class="pre">zH</span></tt> &#8212; the height of the zoomed math</p> +</li> +</ul> +<p>All of these values are in pixels.</p> +<table class="docutils field-list" frame="void" rules="none"> +<col class="field-name" /> +<col class="field-body" /> +<tbody valign="top"> +<tr class="field"><th class="field-name">Parameters :</th><td class="field-body"><ul class="first simple"> +<li><strong>jax</strong> &#8212; the jax to be zoomed</li> +<li><strong>span</strong> &#8212; the <tt class="docutils literal"><span class="pre">&lt;span&gt;</span></tt> in which to place the zoomed math</li> +<li><strong>math</strong> &#8212; the DOM element generating the zoom event</li> +<li><strong>Mw</strong> &#8212; the maximum width of the zoom box</li> +<li><strong>Mh</strong> &#8212; the maximum height of the zoom box</li> +</ul> +</td> +</tr> +<tr class="field"><th class="field-name">Returns :</th><td class="field-body"><p class="first last">a structure as described above</p> +</td> +</tr> +</tbody> +</table> +</dd></dl> + </div> </div> diff --git a/docs/html/api/variable.html b/docs/html/api/variable.html @@ -70,7 +70,7 @@ code, the onload handler, the browser data, and so forth.</p> <dt> <tt class="descname">MathJax.Ajax</tt></dt> <dd><p>Contains the code for loading external modules and creating -stylesheets. Most of the code that causes most of MathJax to +stylesheets. Most of the code that causes MathJax to operate asynchronously is handled here.</p> </dd></dl> @@ -105,6 +105,13 @@ For example, the <cite>tex2jax</cite> preprocessor creates <dl class="describe"> <dt> +<tt class="descname">MathJax.Menu</tt></dt> +<dd><p>Initially null, this is where the MathJax contextual menu is +stored, when <tt class="docutils literal"><span class="pre">extensions/MathMenu.js</span></tt> is loaded.</p> +</dd></dl> + +<dl class="describe"> +<dt> <tt class="descname">MathJax.Object</tt></dt> <dd><p>Contains the code for the MathJax object-oriented programming model.</p> </dd></dl> @@ -142,7 +149,13 @@ itself as <tt class="docutils literal"><span class="pre">MathJax.ElementJax.mml< <dl class="describe"> <dt> <tt class="descname">MathJax.version</tt></dt> -<dd><p>The version number of the MathJax library.</p> +<dd><p>The version number of the MathJax library as a whole.</p> +</dd></dl> + +<dl class="describe"> +<dt> +<tt class="descname">MathJax.fileversion</tt></dt> +<dd><p>The version number of the <tt class="docutils literal"><span class="pre">MathJax.js</span></tt> file specifically.</p> </dd></dl> <dl class="describe"> diff --git a/docs/html/callbacks.html b/docs/html/callbacks.html @@ -223,10 +223,10 @@ you simply passed the object&#8217;s method to <tt class="docutils literal"><spa might want to pass an argument to the function called by <tt class="docutils literal"><span class="pre">setTimeout()</span></tt>. (Altough the <tt class="docutils literal"><span class="pre">setTimeout()</span></tt> function can accept additional arguements that are supposed to be passed on to the code -when it is called, Internet Explorer does not implement that feature, -so you can&#8217;t rely on it.) You can use a <cite>Callback</cite> object to -do this, and the <tt class="xref py py-meth docutils literal"><span class="pre">MathJax.Callback()</span></tt> method will create one for -you. For example,</p> +when it is called, some versions of Internet Explorer do not implement +that feature, so you can&#8217;t rely on it.) You can use a <cite>Callback</cite> +object to do this, and the <tt class="xref py py-meth docutils literal"><span class="pre">MathJax.Callback()</span></tt> method will +create one for you. For example,</p> <div class="highlight-javascript"><div class="highlight"><pre><span class="kd">function</span> <span class="nx">f</span><span class="p">(</span><span class="nx">x</span><span class="p">)</span> <span class="p">{</span><span class="nx">alert</span><span class="p">(</span><span class="s2">&quot;x = &quot;</span><span class="o">+</span><span class="nx">x</span><span class="p">)}</span> <span class="nx">setTimeout</span><span class="p">(</span><span class="nx">MathJax</span><span class="p">.</span><span class="nx">Callback</span><span class="p">([</span><span class="nx">f</span><span class="p">,</span><span class="s2">&quot;Hello World!&quot;</span><span class="p">]),</span><span class="mi">500</span><span class="p">);</span> </pre></div> diff --git a/docs/html/dynamic.html b/docs/html/dynamic.html @@ -53,59 +53,49 @@ <span id="ajax-mathjax"></span><h1>Loading MathJax Dynamically<a class="headerlink" href="#loading-mathjax-dynamically" title="Permalink to this headline">¶</a></h1> <p>MathJax is designed to be included via a <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> tag in the <tt class="docutils literal"><span class="pre">&lt;head&gt;</span></tt> section of your HTML document, and it does rely on being -part of the original document in that it uses an <tt class="docutils literal"><span class="pre">onload</span></tt> event -handler to synchronize its actions with the loading of the page. -If you wish to insert MathJax into a document after it has -been loaded, that will normally occur <em>after</em> the page&#8217;s <tt class="docutils literal"><span class="pre">onload</span></tt> -handler has fired, and so MathJax will not be able to tell if it is -safe for it to process the contents of the page. Indeed, it will wait -forever for its <tt class="docutils literal"><span class="pre">onload</span></tt> handler to fire, and so will never process -the page.</p> -<p>To solve this problem, you will need to call MathJax&#8217;s <tt class="docutils literal"><span class="pre">onload</span></tt> -handler yourself, to let it know that it is OK to typeset the -mathematics on the page. You accomplish this by calling the -<tt class="xref py py-meth docutils literal"><span class="pre">MathJax.Hub.Startup.onload()</span></tt> method as part of your MathJax -startup script. To do this, you will need to give MathJax an in-line -configuration.</p> +part of the original document in that it uses an <tt class="docutils literal"><span class="pre">onload</span></tt> or +<tt class="docutils literal"><span class="pre">DOMContentLoaded</span></tt> event handler to synchronize its actions with the +loading of the page. If you wish to insert MathJax into a document +after it has been loaded, that will normally occur <em>after</em> the page&#8217;s +<tt class="docutils literal"><span class="pre">onload</span></tt> handler has fired, and prior to version 2.0, MathJax had to +be told not to wait for the page <tt class="docutils literal"><span class="pre">onload</span></tt> event by calling +<tt class="xref py py-meth docutils literal"><span class="pre">MathJax.Hub.Startup.onload()</span></tt> by hand. That is no longer +necessary, as MathJax v2.0 detects whether the page is already +available and when it is, it processes it immediately rather than +waiting for an event that has already happened.</p> <p>Here is an example of how to load and configure MathJax dynamically:</p> <div class="highlight-javascript"><div class="highlight"><pre><span class="p">(</span><span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> <span class="kd">var</span> <span class="nx">script</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s2">&quot;script&quot;</span><span class="p">);</span> <span class="nx">script</span><span class="p">.</span><span class="nx">type</span> <span class="o">=</span> <span class="s2">&quot;text/javascript&quot;</span><span class="p">;</span> - <span class="nx">script</span><span class="p">.</span><span class="nx">src</span> <span class="o">=</span> <span class="s2">&quot;http://cdn.mathjax.org/mathjax/latest/MathJax.js&quot;</span><span class="p">;</span> - - <span class="kd">var</span> <span class="nx">config</span> <span class="o">=</span> <span class="s1">&#39;MathJax.Hub.Config({&#39;</span> <span class="o">+</span> - <span class="s1">&#39;extensions: [&quot;tex2jax.js&quot;],&#39;</span> <span class="o">+</span> - <span class="s1">&#39;jax: [&quot;input/TeX&quot;,&quot;output/HTML-CSS&quot;]&#39;</span> <span class="o">+</span> - <span class="s1">&#39;});&#39;</span> <span class="o">+</span> - <span class="s1">&#39;MathJax.Hub.Startup.onload();&#39;</span><span class="p">;</span> - - <span class="k">if</span> <span class="p">(</span><span class="nb">window</span><span class="p">.</span><span class="nx">opera</span><span class="p">)</span> <span class="p">{</span><span class="nx">script</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">config</span><span class="p">}</span> - <span class="k">else</span> <span class="p">{</span><span class="nx">script</span><span class="p">.</span><span class="nx">text</span> <span class="o">=</span> <span class="nx">config</span><span class="p">}</span> - + <span class="nx">script</span><span class="p">.</span><span class="nx">src</span> <span class="o">=</span> <span class="s2">&quot;http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML&quot;</span><span class="p">;</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByTagName</span><span class="p">(</span><span class="s2">&quot;head&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">].</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">script</span><span class="p">);</span> <span class="p">})();</span> </pre></div> </div> -<p>You can adjust the <tt class="docutils literal"><span class="pre">config</span></tt> variable to your needs, but be careful to get -the commas right. The <tt class="docutils literal"><span class="pre">window.opera</span></tt> test is because some versions of -Opera don&#8217;t handle setting <tt class="docutils literal"><span class="pre">script.text</span></tt> properly, while Internet -Explorer doesn&#8217;t handle setting the <tt class="docutils literal"><span class="pre">innerHTML</span></tt> of a script tag.</p> -<p>Here is a version that uses the <tt class="docutils literal"><span class="pre">config=filename</span></tt> method to -configure MathJax:</p> +<p>If you need to provide in-line configuration, you can do that using a +MathJax&#8217;s configuration script:</p> <div class="highlight-javascript"><div class="highlight"><pre><span class="p">(</span><span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="kd">var</span> <span class="nx">script</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s2">&quot;script&quot;</span><span class="p">);</span> + <span class="kd">var</span> <span class="nx">head</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByTagName</span><span class="p">(</span><span class="s2">&quot;head&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span> <span class="nx">script</span><span class="p">;</span> + <span class="nx">script</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s2">&quot;script&quot;</span><span class="p">);</span> + <span class="nx">script</span><span class="p">.</span><span class="nx">type</span> <span class="o">=</span> <span class="s2">&quot;text/x-mathjax-config&quot;</span><span class="p">;</span> + <span class="nx">script</span><span class="p">[(</span><span class="nb">window</span><span class="p">.</span><span class="nx">opera</span> <span class="o">?</span> <span class="s2">&quot;innerHTML&quot;</span> <span class="o">:</span> <span class="s2">&quot;text&quot;</span><span class="p">)]</span> <span class="o">=</span> + <span class="s2">&quot;MathJax.Hub.Config({\n&quot;</span> <span class="o">+</span> + <span class="s2">&quot; tex2jax: { inlineMath: [[&#39;$&#39;,&#39;$&#39;], [&#39;\\\\(&#39;,&#39;\\\\)&#39;]] }\n&quot;</span> <span class="o">+</span> + <span class="s2">&quot;});&quot;</span> + <span class="nx">head</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">script</span><span class="p">);</span> + <span class="nx">script</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s2">&quot;script&quot;</span><span class="p">);</span> <span class="nx">script</span><span class="p">.</span><span class="nx">type</span> <span class="o">=</span> <span class="s2">&quot;text/javascript&quot;</span><span class="p">;</span> - <span class="nx">script</span><span class="p">.</span><span class="nx">src</span> <span class="o">=</span> <span class="s2">&quot;http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full&quot;</span><span class="p">;</span> - - <span class="kd">var</span> <span class="nx">config</span> <span class="o">=</span> <span class="s1">&#39;MathJax.Hub.Startup.onload();&#39;</span><span class="p">;</span> - - <span class="k">if</span> <span class="p">(</span><span class="nb">window</span><span class="p">.</span><span class="nx">opera</span><span class="p">)</span> <span class="p">{</span><span class="nx">script</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">config</span><span class="p">}</span> - <span class="k">else</span> <span class="p">{</span><span class="nx">script</span><span class="p">.</span><span class="nx">text</span> <span class="o">=</span> <span class="nx">config</span><span class="p">}</span> - - <span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByTagName</span><span class="p">(</span><span class="s2">&quot;head&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">].</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">script</span><span class="p">);</span> + <span class="nx">script</span><span class="p">.</span><span class="nx">src</span> <span class="o">=</span> <span class="s2">&quot;http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML&quot;</span><span class="p">;</span> + <span class="nx">head</span><span class="p">.</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">script</span><span class="p">);</span> <span class="p">})();</span> </pre></div> </div> +<p>You can adjust the configuration to your needs, but be careful to get +the commas right, as Internet Explorer 6 and 7 will not tolerate an +extra comma before a closing brace. The <tt class="docutils literal"><span class="pre">window.opera</span></tt> test is +because some versions of Opera don&#8217;t handle setting <tt class="docutils literal"><span class="pre">script.text</span></tt> +properly, while some versions of Internet Explorer don&#8217;t handle +setting <tt class="docutils literal"><span class="pre">script.innerHTML</span></tt>.</p> <p>Note that the <strong>only</strong> reliable way to configure MathJax is to use an in-line configuration block of the type discussed above. You should <strong>not</strong> call <tt class="xref py py-meth docutils literal"><span class="pre">MathJax.Hub.Config()</span></tt> directly in your code, as it will @@ -148,9 +138,8 @@ IE+MathPlayer.</p> <span class="p">(</span><span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByTagNameNS</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">?</span> <span class="kc">false</span> <span class="o">:</span> <span class="p">(</span><span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByTagNameNS</span><span class="p">(</span><span class="s2">&quot;http://www.w3.org/1998/Math/MathML&quot;</span><span class="p">,</span><span class="s2">&quot;math&quot;</span><span class="p">).</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">)))</span> <span class="p">{</span> <span class="kd">var</span> <span class="nx">script</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s2">&quot;script&quot;</span><span class="p">);</span> + <span class="nx">script</span><span class="p">.</span><span class="nx">type</span> <span class="o">=</span> <span class="s2">&quot;text/javascript&quot;</span><span class="p">;</span> <span class="nx">script</span><span class="p">.</span><span class="nx">src</span> <span class="o">=</span> <span class="s2">&quot;http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full&quot;</span><span class="p">;</span> - <span class="kd">var</span> <span class="nx">config</span> <span class="o">=</span> <span class="s1">&#39;MathJax.Hub.Startup.onload()&#39;</span><span class="p">;</span> - <span class="k">if</span> <span class="p">(</span><span class="nb">window</span><span class="p">.</span><span class="nx">opera</span><span class="p">)</span> <span class="p">{</span><span class="nx">script</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">config</span><span class="p">}</span> <span class="k">else</span> <span class="p">{</span><span class="nx">script</span><span class="p">.</span><span class="nx">text</span> <span class="o">=</span> <span class="nx">config</span><span class="p">}</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByTagName</span><span class="p">(</span><span class="s2">&quot;head&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">].</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">script</span><span class="p">);</span> <span class="p">}</span> <span class="p">}</span> @@ -185,9 +174,8 @@ converting the math images to their original TeX code.</p> <span class="c1">// Load MathJax and have it process the page</span> <span class="c1">//</span> <span class="kd">var</span> <span class="nx">script</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">createElement</span><span class="p">(</span><span class="s2">&quot;script&quot;</span><span class="p">);</span> + <span class="nx">script</span><span class="p">.</span><span class="nx">type</span> <span class="o">=</span> <span class="s2">&quot;text/javascript&quot;</span><span class="p">;</span> <span class="nx">script</span><span class="p">.</span><span class="nx">src</span> <span class="o">=</span> <span class="s2">&quot;http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full&quot;</span><span class="p">;</span> - <span class="kd">var</span> <span class="nx">config</span> <span class="o">=</span> <span class="s1">&#39;MathJax.Hub.Startup.onload()&#39;</span><span class="p">;</span> - <span class="k">if</span> <span class="p">(</span><span class="nb">window</span><span class="p">.</span><span class="nx">opera</span><span class="p">)</span> <span class="p">{</span><span class="nx">script</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">config</span><span class="p">}</span> <span class="k">else</span> <span class="p">{</span><span class="nx">script</span><span class="p">.</span><span class="nx">text</span> <span class="o">=</span> <span class="nx">config</span><span class="p">}</span> <span class="nb">document</span><span class="p">.</span><span class="nx">getElementsByTagName</span><span class="p">(</span><span class="s2">&quot;head&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">].</span><span class="nx">appendChild</span><span class="p">(</span><span class="nx">script</span><span class="p">);</span> <span class="p">}</span> <span class="p">}</span> diff --git a/docs/html/genindex.html b/docs/html/genindex.html @@ -45,11 +45,12 @@ <h1 id="index">Index</h1> <div class="genindex-jumpbox"> - <a href="#A"><strong>A</strong></a> | <a href="#C"><strong>C</strong></a> | <a href="#D"><strong>D</strong></a> | <a href="#E"><strong>E</strong></a> | <a href="#F"><strong>F</strong></a> | <a href="#G"><strong>G</strong></a> | <a href="#H"><strong>H</strong></a> | <a href="#I"><strong>I</strong></a> | <a href="#J"><strong>J</strong></a> | <a href="#L"><strong>L</strong></a> | <a href="#M"><strong>M</strong></a> | <a href="#N"><strong>N</strong></a> | <a href="#P"><strong>P</strong></a> | <a href="#Q"><strong>Q</strong></a> | <a href="#R"><strong>R</strong></a> | <a href="#S"><strong>S</strong></a> | <a href="#T"><strong>T</strong></a> | <a href="#U"><strong>U</strong></a> | <a href="#W"><strong>W</strong></a> + <a href="#A"><strong>A</strong></a> | <a href="#C"><strong>C</strong></a> | <a href="#D"><strong>D</strong></a> | <a href="#E"><strong>E</strong></a> | <a href="#F"><strong>F</strong></a> | <a href="#G"><strong>G</strong></a> | <a href="#H"><strong>H</strong></a> | <a href="#I"><strong>I</strong></a> | <a href="#J"><strong>J</strong></a> | <a href="#L"><strong>L</strong></a> | <a href="#M"><strong>M</strong></a> | <a href="#N"><strong>N</strong></a> | <a href="#P"><strong>P</strong></a> | <a href="#Q"><strong>Q</strong></a> | <a href="#R"><strong>R</strong></a> | <a href="#S"><strong>S</strong></a> | <a href="#T"><strong>T</strong></a> | <a href="#U"><strong>U</strong></a> | <a href="#W"><strong>W</strong></a> | <a href="#Z"><strong>Z</strong></a> </div> <h2 id="A">A</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%" valign="top"><dl> + <dt><a href="api/callback.html#Add">Add()</a></dt> <dt><a href="api/html.html#addElement">addElement()</a></dt> <dt><a href="api/html.html#addText">addText()</a></dt> </dl></td> @@ -85,9 +86,10 @@ <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%" valign="top"><dl> <dt><a href="api/html.html#Element">Element()</a></dt> - <dt><a href="api/signal.html#ExecuteHook">ExecuteHook()</a></dt> + <dt><a href="api/callback.html#Execute">Execute()</a></dt> </dl></td> <td style="width: 33%" valign="top"><dl> + <dt><a href="api/signal.html#ExecuteHook">ExecuteHook()</a></dt> <dt><a href="api/callback.html#ExecuteHooks">ExecuteHooks()</a></dt> </dl></td> </tr></table> @@ -109,10 +111,12 @@ <td style="width: 33%" valign="top"><dl> <dt><a href="api/hub.html#getAllJax">getAllJax()</a></dt> <dt><a href="api/hub.html#getJaxByInputType">getJaxByInputType()</a></dt> + <dt><a href="api/hub.html#getJaxByType">getJaxByType()</a></dt> </dl></td> <td style="width: 33%" valign="top"><dl> - <dt><a href="api/hub.html#getJaxByType">getJaxByType()</a></dt> <dt><a href="api/hub.html#getJaxFor">getJaxFor()</a></dt> + <dt><a href="api/outputjax.html#getJaxFromMath">getJaxFromMath()</a></dt> + <dt><a href="api/html.html#getScript">getScript()</a></dt> </dl></td> </tr></table> @@ -120,6 +124,7 @@ <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%" valign="top"><dl> <dt><a href="api/object.html#has">has()</a></dt> + <dt><a href="api/callback.html#Hooks">Hooks()</a></dt> </dl></td> <td style="width: 33%" valign="top"><dl> <dt><a href="glossary.html#term-html-css">HTML-CSS</a></dt> @@ -175,6 +180,9 @@ <h2 id="N">N</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%" valign="top"><dl> + <dt><a href="api/elementjax.html#needsUpdate">needsUpdate()</a></dt> +</dl></td> + <td style="width: 33%" valign="top"><dl> <dt><a href="api/signal.html#NoInterest">NoInterest()</a></dt> </dl></td> </tr></table> @@ -183,10 +191,13 @@ <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%" valign="top"><dl> <dt><a href="api/signal.html#Post">Post()</a></dt> + <dt><a href="api/outputjax.html#postTranslate">postTranslate()</a></dt> <dt><a href="api/ajax.html#Preloading">Preloading()</a></dt> <dt><a href="api/hub.html#PreProcess">PreProcess()</a></dt> </dl></td> <td style="width: 33%" valign="top"><dl> + <dt><a href="api/outputjax.html#preProcess">preProcess()</a></dt> + <dt><a href="api/outputjax.html#preTranslate">preTranslate()</a></dt> <dt><a href="api/hub.html#Process">Process()</a></dt> <dt><a href="api/queue.html#Push">Push()</a></dt> </dl></td> @@ -205,9 +216,10 @@ <dt><a href="api/jax.html#Register">Register()</a></dt> <dt><a href="api/message.html#Remove">Remove()</a></dt> <dt><a href="api/hub.html#Reprocess">Reprocess()</a></dt> + <dt><a href="api/ajax.html#Require">Require()</a></dt> </dl></td> <td style="width: 33%" valign="top"><dl> - <dt><a href="api/ajax.html#Require">Require()</a></dt> + <dt><a href="api/hub.html#Rerender">Rerender()</a></dt> <dt><a href="api/callback.html#reset">reset()</a></dt> <dt><a href="api/queue.html#Resume">Resume()</a></dt> </dl></td> @@ -217,6 +229,7 @@ <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%" valign="top"><dl> <dt><a href="api/message.html#Set">Set()</a></dt> + <dt><a href="api/hub.html#setRenderer">setRenderer()</a></dt> <dt><a href="api/html.html#setScript">setScript()</a></dt> <dt><a href="api/callback.html#Signal">Signal()</a></dt> <dt><a href="api/elementjax.html#SourceElement">SourceElement()</a></dt> @@ -258,6 +271,13 @@ </dl></td> </tr></table> +<h2 id="Z">Z</h2> +<table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%" valign="top"><dl> + <dt><a href="api/outputjax.html#Zoom">Zoom()</a></dt> +</dl></td> +</tr></table> + </div> diff --git a/docs/html/index.html b/docs/html/index.html @@ -122,7 +122,7 @@ MathML, and AsciiMath notaion that works in all modern browsers.</p> </li> </ul> <hr class="docutils" /> -<p>This version of the documentation was built February 15, 2012.</p> +<p>This version of the documentation was built February 20, 2012.</p> </div> </div> diff --git a/docs/html/model.html b/docs/html/model.html @@ -54,7 +54,7 @@ <p>The purpose of MathJax is to bring the ability to include mathematics easily in web pages to as wide a range of browsers as possible. Authors can specify mathematics in a variety of formats (e.g., -<a class="reference internal" href="glossary.html#term-mathml"><em class="xref std std-term">MathML</em></a> or <a class="reference internal" href="glossary.html#term-latex"><em class="xref std std-term">LaTeX</em></a>), and MathJax provides high-quality +<a class="reference internal" href="glossary.html#term-mathml"><em class="xref std std-term">MathML</em></a>, <a class="reference internal" href="glossary.html#term-latex"><em class="xref std std-term">LaTeX</em></a>, or <a class="reference internal" href="glossary.html#term-asciimath"><em class="xref std std-term">AsciiMath</em></a>), and MathJax provides high-quality mathematical typesetting even in those browsers that do not have native MathML support. This all happens without the need for special downloads or plugins, but rendering will be enhanced if high-quality @@ -81,17 +81,19 @@ document is to be typeset as mathematics. In this case, MathJax can run a preprocessor to locate the math delimiters and replace them by the special tags that it uses to mark the formulas. There are preprocessors for <a class="reference internal" href="tex.html#tex-support"><em>TeX notation</em></a>, <a class="reference internal" href="mathml.html#mathml-support"><em>MathML -notation</em></a>, and the <a class="reference internal" href="jsMath.html#jsmath-support"><em>jsMath notation</em></a> that uses <cite>span</cite> and <cite>div</cite> tags.</p> +notation</em></a>, <a class="reference internal" href="asciimath.html#asciimath-support"><em>AsciiMath notation</em></a> and the <a class="reference internal" href="jsMath.html#jsmath-support"><em>jsMath notation</em></a> that uses <cite>span</cite> and <cite>div</cite> tags.</p> <p>For pages that are constructed programmatically, such as HTML pages that result from running a processor on text in some other format (e.g., pages produced from Markdown documents, or via programs like <cite>tex4ht</cite>), it would be best to use MathJax&#8217;s special tags directly, as described below, rather than having MathJax run another preprocessor. This will speed up the final display of the -mathematics, since the extra preprocessing step would not be needed, -and it also avoids the conflict between the use of the less-than sign, +mathematics, since the extra preprocessing step would not be needed. +It also avoids the conflict between the use of the less-than sign, <tt class="docutils literal"><span class="pre">&lt;</span></tt>, in mathematics and as an HTML special character (that starts -an HTML tag).</p> +an HTML tag), and several other issues involved in having the +mathematics directly in the text of the page (see the documentation on +the various input jax for more details on this).</p> <div class="section" id="how-mathematics-is-stored-in-the-page"> <span id="mathjax-script-tags"></span><h2>How mathematics is stored in the page<a class="headerlink" href="#how-mathematics-is-stored-in-the-page" title="Permalink to this headline">¶</a></h2> <p>In order to identify mathematics in the page, MathJax uses special @@ -107,8 +109,9 @@ kind of script that the tag contains. The usual (and default) value is <tt class="docutils literal"><span class="pre">type=&quot;text/javascript&quot;</span></tt>, and when a script has this type, the browser executes the script as a javascript program. MathJax, however, uses the type <cite>math/tex</cite> to identify mathematics in the TeX -and LaTeX notation, and <cite>math/mml</cite> for mathematics in MathML -notation. When the <cite>tex2jax</cite> or <cite>mml2jax</cite> preprocessors run, they +and LaTeX notation, <cite>math/mml</cite> for mathematics in MathML notation, and +<cite>math/asciimath</cite> for mathematics in AsciiMath notation. When the +<cite>tex2jax</cite>, <cite>mml2jax</cite>, or <cite>asciimath2jax</cite> preprocessors run, they create <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> tags with these types so that MathJax can process them when it runs its main typesetting pass.</p> <p>For example,</p> @@ -214,16 +217,24 @@ specific output format. For example, the NativeMML output jax inserts MathML tags into the page to represent the mathematics, while the HTML-CSS output jax uses HTML with CSS styling to lay out the mathematics so that it can be displayed even in browsers that don&#8217;t -understand MathML. Output jax could be produced that render the -mathematics using SVG, for example, or that speak an equation for -blind users. The MathJax contextual menu can be used to switch -between the output jax that are available.</p> +understand MathML. MathJax also has an <a class="reference internal" href="glossary.html#term-svg"><em class="xref std std-term">SVG</em></a> output jax that +will render the mathematics using scalable vector grtaphics. Output +jax could be produced that render the mathematics using HTML5 canvas +elements, for example, or that speak an equation for blind users. The +MathJax contextual menu can be used to switch between the output jax +that are available.</p> <p>Each input and output jax has a small configuration file that is loaded when that input jax is included in the <cite>jax</cite> array in the MathJax configuration, and a larger file that implements the core -functionality of that particular jax. The latter file is loaded -the first time the jax is needed by MathJax to process some -mathematics.</p> +functionality of that particular jax. The latter file is loaded the +first time the jax is needed by MathJax to process some mathematics. +Most of the combined configuration files include only the small +configuration portion for the input and output jax, making the +configuraiton file smaller and faster to load for those pages that +don&#8217;t actually incldue mathematics; the combined configurations that +end in <tt class="docutils literal"><span class="pre">-full</span></tt> include both parts of the jax, so there is no delay +when the math is to be rendered, but at the expense of a larger +initial download.</p> <p>The <strong>MathJax Hub</strong> keeps track of the internal representations of the various mathematical equations on the page, and can be queried to obtain information about those equations. For example, one can obtain diff --git a/docs/html/searchindex.js b/docs/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({objects:{"":{Load:[0,0,1],Preloading:[0,0,1],Log:[18,0,1],ExecuteHooks:[28,0,1],setScript:[12,0,1],Subclass:[40,0,1],Delay:[28,0,1],Init:[40,0,1],getAllJax:[39,0,1],Interest:[29,0,1],Translate:[41,0,1],Config:[39,0,1],addElement:[12,0,1],Reprocess:[39,0,1],Styles:[0,0,1],ExecuteHook:[29,0,1],loadTimeout:[0,0,1],Resume:[17,0,1],Update:[39,0,1],loadComplete:[0,0,1],formatError:[39,0,1],call:[17,0,1],getJaxByInputType:[39,0,1],PreProcess:[39,0,1],Post:[29,0,1],has:[40,0,1],Signal:[28,0,1],Set:[18,0,1],Insert:[39,0,1],addText:[12,0,1],TextNode:[12,0,1],Augment:[40,0,1],Clear:[18,0,1],Register:[41,0,1],Remove:[18,0,1],Element:[12,0,1],Queue:[28,0,1],NoInterest:[29,0,1],Suspend:[17,0,1],getJaxByType:[39,0,1],Push:[17,0,1],Typeset:[39,0,1],fileURL:[0,0,1],wait:[17,0,1],reset:[28,0,1],getJaxFor:[39,0,1],LoadHook:[0,0,1],Process:[39,0,1],Text:[48,0,1],loadError:[0,0,1],Startup:[41,0,1],SourceElement:[48,0,1],can:[40,0,1],File:[18,0,1],MessageHook:[29,0,1],isJax:[39,0,1],filterText:[18,0,1],isa:[40,0,1],Require:[0,0,1]}},terms:{represent:54,lspace:49,reprocess:[39,48,51],mathjax_msie_fram:18,yellow:49,four:[49,1,14],prefix:[12,20,42],asymp:49,blacktriangledown:49,webfont:[6,45,20],whose:[12,7,51,5,46,33,39,24],html5:[14,42,20,44,53,7],under:[44,37],preprocess:[54,39,30,51],asciimath2jax:[43,20,33,15,26],worth:7,digit:42,gimel:49,everi:[19,39,42,7],risk:20,mskip:49,arcco:49,govern:[20,14,7],dotplu:49,affect:[14,37,42,49,39,48,26],eqnarrai:49,cmd:22,bigodot:49,c6h5:49,ominu:49,vector:[47,53],math:[30,5,7,11,12,13,14,42,43,18,19,20,41,22,23,27,15,3,32,33,35,36,37,10,39,49,44,45,47,50,51,52,53,54],nparallel:49,showcontext:50,nsubseteqq:49,direct:[6,14,45,37],consequ:11,second:[0,14,37,28,46,56,52,5,6,33,21,22,7,19,10,44,24,1],ngeq:49,even:[0,3,49,39,28,17,19,20,21,23,15,29,46,7,43,44,45,1,51,52,53,54],hide:51,prejax:[54,22],neg:49,menclos:49,"new":[30,4,49,12,13,14,42,18,19,20,25,23,24,26,28,39,10,7,40,29,37,48,1,50,51,52,53,54],net:20,mhtml:2,told:[49,52],limsup:49,elimin:22,behavior:[14,37,22,7],lessapprox:49,never:[37,0,7,3,41],here:[12,49,34,28,46,48,1,3,51,19,20,41,22,39,29],updiagonalstrik:49,met:30,lneqq:49,path:[43,0,7,20],noundefin:[43,20,49],interpret:[49,20,37,15],nrightarrow:49,forum:[20,4],mbox:49,rceil:49,linearli:53,circleddash:49,mathstrut:49,unix:37,org:[14,42,2,3,50,51,49,20,35,8,53,38,7],thinmathspac:44,unit:[49,42],highli:23,describ:[12,49,14,37,28,20,47,56,30,51,43,6,21,7,46,54,39],would:[5,6,7,9,11,12,14,15,43,17,20,25,22,48,27,28,31,32,33,35,36,37,39,40,49,45,46,21,56,50,51,53,54,55,1],afterward:46,readi:[43,19,41,30,34],ltime:49,varlambda:49,call:[0,2,3,49,6,7,9,14,17,18,19,20,25,22,24,26,27,28,29,31,32,33,36,37,10,39,40,41,5,45,46,47,48,1,50,51,52,11,54,55],recommend:[20,54,37,53],vcenter:49,preview:[27,5,32,33,22,54],type:[0,2,3,5,8,10,12,14,43,19,20,41,22,48,39,35,38,7,49,44,24,1,51,52,53,54],until:[0,27,46,1,5,32,33,41,22,7,19,39,29],notin:49,displaymath:[5,7],relat:[0,42,53],notic:[49,15],warn:[0,14,22,6],jpg:[5,32,33,21,27],loss:7,hold:[0,21,22,36,54,39],unpack:[20,37],must:[0,30,49,6,14,17,18,20,25,22,15,29,33,36,37,7,5,44,45,47,56,52,53],fbox:[49,42],join:[19,49],centerdot:49,setup:[23,20,44],work:[12,13,14,37,42,15,46,49,3,4,51,43,20,44,35,52,19,23,53,40],cc0000:[56,22],tag_nam:37,root:[0,42,30,18,49,7],overrid:[40,6,10,41,24],mathmenu:[45,56,50,43,11,26],give:[49,45,20,47,56,3,19,6,21,7,29,25,26],cirit:7,indic:[0,7,37,15,46,17,49,30,19,20,29,41,22,48,10,39,24,54],impair:23,hline:49,want:[4,5,14,28,43,16,18,19,20,22,24,15,46,33,37,38,7,40,49,44,45,1,51,53,55],david:15,setminu:49,end:[0,5,44,15,2,53,49,30,4,43,8,19,38,7,1,42],quot:[5,33,45,22,42],hom:49,heartsuit:49,how:[0,2,3,4,5,6,7,8,14,15,43,17,18,20,21,22,27,28,29,32,33,35,36,37,39,49,45,31,50,52,11,54],disappear:[5,32,33,27],answer:[4,51],verifi:[20,37,4],config:[2,30,5,6,7,8,9,10,11,14,43,18,19,20,25,22,24,26,27,15,3,31,32,33,35,36,38,39,41,49,45,46,56,50,51,53,55,1],renewcommand:49,updat:[39,37,42,2,1,51,14,22,7,48],showrender:50,recogn:20,lai:[53,54],diagdown:49,after:[0,45,28,46,17,49,3,50,18,19,20,41,22,51,52,37,54,7,29,1,26],befor:[0,2,30,4,49,7,8,14,15,17,18,19,20,21,22,25,28,29,46,33,36,39,40,41,5,44,45,47,1,51,52,53,54],wrong:44,startuphook:[19,39],parallel:[49,1,30,42],averag:54,alignedat:49,attempt:[0,44,50],third:[1,44],leftarrow:49,receiv:[29,14,37,46,19,20,41,52,7,40],greasekit:3,maintain:[14,52,4,19,46,22],environ:[5,20,49,25,4],enter:[44,31,51,49,20,54,7],textnod:12,order:[30,49,6,5,14,17,18,20,22,27,39,32,33,37,7,40,29,45,46,47,1,53,54],oper:[0,5,6,9,11,42,17,18,19,25,46,23,27,31,33,36,45,41,29,34,37,32,47,1,50,51,53,55],approxeq:49,over:[12,0,45,42,49,50,51,43,20,22,36,53,54,7],fall:[37,15,20,1,49,6],becaus:[19,14,45,1,15,46,49,3,18,5,20,33,21,7,54,44,29,25,51],boxtim:49,suspend:[19,17,1,29],textrm:49,appar:1,afil:46,flexibl:[21,1,14],vari:53,smallint:49,img:[27,56,3,5,32,33,21],fix:[53,14,37,42,7],strang:44,better:[42,15,31,50,20,35,8,53,7],boxminu:49,drawback:53,upharpoonleft:49,persist:4,comprehens:47,hidden:49,easier:[29,14,37,1,49,44,40],moveleft:49,them:[0,5,6,12,14,42,43,17,19,20,25,15,29,39,31,33,7,49,44,37,46,56,54,1],thei:[0,3,4,5,6,7,9,11,14,42,43,16,17,18,19,20,25,22,26,27,29,30,31,32,33,36,37,39,41,49,45,46,47,21,56,50,51,52,53,54,55,1],qualiti:[23,53,54],safe:[12,20,3,51],rectangl:47,"break":[49,52,1,42],emph:49,mtext:[49,20,42],wedg:49,widetild:49,choic:[53,39,8],dbinom:49,leftharpoondown:49,timeout:[0,42,28],each:[5,7,37,15,28,29,49,30,52,18,43,20,33,51,19,54,39,1],debug:18,side:[18,49,20,25,22,8],mean:[2,30,5,6,14,43,16,19,22,23,27,15,29,3,32,33,7,49,46,51,52,53],leqq:49,createel:3,resum:[17,1],represetn:49,leqalignno:49,mathopen:49,looparrowleft:49,network:[14,37,42,43,20,38,7],goe:[49,52,1],newli:[12,19,40],crucial:37,predefin:22,content:[2,30,5,8,10,12,14,42,43,20,21,22,39,3,33,38,7,40,49,44,47,1,51,53,54],reader:[43,23,49,42,53],forth:34,impract:37,multilin:49,written:[20,8],situat:[20,7,42,51],free:[48,4],ineffici:[40,22],reconfigur:14,lneq:49,angl:49,moment:[20,10,37],isn:[19,41],iphon:42,isa:40,subtl:51,confus:[20,14],attribtu:20,mathbb:49,rang:[20,54],mathbf:49,render:[5,44,42,30,50,43,20,22,23,53,54,55,35],independ:7,yourcolleg:37,restrict:[49,37,22],hook:[19,0,28,29],unlik:[23,49,7,41],alreadi:[0,28,51,49,3,4,18,19,46,52,7,40,1],subtleti:49,primari:[53,14],tooltop:45,top:[34,37,49,20,53,7],sometim:[20,7,37],underlin:[49,42],master:52,too:[49,45,42,15,3,5,20,33,53],similarli:[0,39,37],newenviron:49,john:46,listen:[19,29,39,28],thickapprox:49,namespac:[42,28,3,51,49,20],tool:[1,37],tagind:25,embellish:42,compressor:42,somewhat:52,technic:47,past:[29,14,42,19,52,23,53],filesmatch:37,provid:[12,0,44,2,28,46,17,49,18,19,20,29,21,51,52,23,54,39,40,1],eqalignno:49,x2212:[20,54],tree:[20,21],"final":[14,46,49,20,21,23,54],project:[47,7,4],matter:[19,35],mathtt:49,ldotp:49,modern:[23,6,44,13],mind:[49,20,7,15,2],increment:17,seem:[46,44],rightrightarrow:49,ldot:49,person:46,latter:[49,16,19,31,21,54,7,26],expens:53,simplifi:42,though:[28,15,49,52,21,22,54],object:[0,30,49,6,12,13,16,17,18,19,21,22,24,26,28,46,36,10,39,40,41,29,34,45,47,48,56,50,51,52,11,54,1],gzip:42,regular:[5,20,33,22],letter:[20,37],grave:49,don:[49,14,42,46,1,3,31,51,19,6,44,7,53,54,39],dom:[12,48,1,51,19,52,41,22,39,24],doe:[49,44,37,15,28,46,55,48,3,19,20,11,22,7,23,53,10,39,24,54],declar:[44,45,56,50,49,6,11,36],place:[0,45,6,49,4,51,19,20,29,25,22,37,7,40,1,35],tfrac:49,unchang:[49,14,55,51],sum:[49,28],came:37,delaystartupuntil:[39,30,22,7],random:[20,37],lnapprox:49,syntax:[49,47,40,42,15],mediawiki:2,isopera:39,outerhtml:42,shownam:46,asynchon:51,next:[15,52,51,49,31,48],involv:[49,52,7,4],consolid:23,layout:48,firstnam:46,mathchoic:49,ismsi:[39,30],menu:[13,44,45,42,30,50,43,11,22,36,8,37,53,38,48,54],explain:[14,2,43,52,7,26],configur:[0,3,5,6,7,8,9,10,13,14,42,18,19,20,25,22,23,24,26,27,15,30,31,32,33,35,36,37,38,39,41,43,44,45,46,21,49,11,53,54,55],apach:37,theme:[7,2,8],rich:[23,47],folder:[20,45,37],stop:[49,45],infti:[49,54],amazon:20,report:[44,22,4],circeq:49,subseteq:49,fadeouttim:6,bar:[49,40,28],method:[12,0,14,40,28,29,17,1,3,52,18,19,46,41,7,48,10,39,24,51],reload:50,bad:42,replacechild:3,neq:49,unexpectedli:[49,20,15],undefinedfamili:45,dashrightarrow:49,scriptscriptstyl:49,precneqq:49,result:[14,45,28,15,46,47,48,1,51,49,20,44,7,53,10,39,24,54],respons:[49,29,10,42,28],fail:[0,42,46,41,53,26],best:[0,14,37,15,1,53,54,7],awar:[49,0,1,44,15],subarrai:49,varinjlim:49,wikipedia:[47,3],circledcirc:49,gneqq:49,awai:[49,7,37],approach:[46,54,2,51],attribut:[12,44,42,20,56,49,32,21,54,7],blacktriangleright:49,extend:[23,54,15],extens:[0,30,5,6,14,42,43,19,20,25,22,26,27,39,3,32,33,35,36,7,41,49,34,47,56,50,51,1],add:[5,14,2,17,49,43,6,33,41,22,48,53,40,56],preprocessor:[5,14,15,20,49,44,30,34,43,32,33,27,22,7,54,39,51,26,35],intop:49,protect:49,expos:15,cow:40,howev:[49,14,37,46,30,56,3,4,18,43,20,22,51,53,54,7,40,1,26],configuraiton:49,against:29,seri:[1,21],com:[7,37],varpsi:49,pre:[5,14,37,49,43,6,33,7],foral:49,can:[0,3,4,5,6,7,12,14,28,43,17,18,19,20,25,22,23,24,26,15,29,30,46,33,34,35,37,10,39,40,41,42,49,44,45,47,56,11,51,52,53,54,1],foobar:40,delic:11,innerhtml:[3,51],height:[49,42,50],wider:4,summat:31,sqsupset:49,speak:[16,54],issol:49,chrome:[45,53,39,3,42],patch:[7,37],three:[44,37,28,46,1,49,6,21,41,52,53,54,20],been:[0,3,4,5,14,17,18,19,20,24,28,30,46,33,35,10,7,29,37,1,51,52,53],trigger:[43,22,36],interest:[19,29,47,4,52],basic:13,tini:49,quickli:[23,7,4],underrightarrow:49,regul:1,xxx:49,ani:[0,3,4,5,6,7,9,11,14,43,17,18,19,20,25,22,48,27,28,29,30,31,32,33,36,37,39,40,49,44,45,46,1,50,51,52,53,55],emploi:53,dash:[56,45],tanh:49,hat:49,servic:[14,37,42,20,38,7],properti:[12,0,34,40,28,29,17,46,41,48,10,39,24],diamondsuit:49,sourceforg:14,weren:14,dashboard:38,"3px":[49,56],succeq:49,have:[0,2,30,4,5,6,7,14,15,43,19,20,11,22,48,26,28,29,3,46,33,37,39,40,42,49,44,45,31,1,51,52,53,54],nexist:49,tabl:[53,44,15],cong:49,sever:[0,5,14,37,49,51,43,46,33,54,24,1],amout:18,disabl:[11,14,45],incorrectli:[20,14,42],perform:[30,4,6,14,42,17,18,19,41,22,48,28,46,39,7,29,34,47,1,51,52,53],suggest:[6,4,20],make:[0,4,5,6,14,42,43,16,17,19,20,22,23,27,39,32,33,37,7,40,49,44,45,56,50,51,52,53,54,1],complex:[53,21],split:49,synch:14,lrcorner:49,unsafewindow:3,complet:[0,30,5,14,43,17,19,20,41,22,48,28,29,39,46,33,7,49,37,47,1,51,52,53],longmapsto:49,hand:[34,18,25,22,54,44,35],fairli:[21,14],rais:[49,42],mkern:49,ignorepast:29,unlhd:49,squar:[49,21,42],redefin:[6,10,41,24],kept:19,thu:[14,28,1,19,46,48],inherit:[16,40,10,24,48],client:45,thi:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56],idotsint:49,programm:40,everyth:[43,49,1,39,7],settimeout:[46,28],left:[44,37,34,30,18,49,52,25,22,8,38,26],processclass:[5,33],identifi:[12,29,15,49,20,54],just:[49,44,37,2,28,46,56,43,20,22,8,23,54,7,29,1],yen:49,mathbin:49,human:20,coprod:49,yet:[44,17,1,51,19,52],languag:[49,20,54,47,52],noscript:[5,33],onload:[34,3,30,46,22,7],errorset:[43,22],easi:[47,35],interfer:[20,31],had:[19,20,14,7],myconfig:[19,46],step1:49,els:[49,46,3,51],save:[53,38,7,56,8],"0x21c0":49,take:[12,0,14,28,2,46,1,30,4,51,49,6,25,52,53,7],sanit:18,applic:[23,20,30,2],loadtimeout:0,preserv:46,bbox:49,background:[49,56,42],sqsubset:49,specif:[0,7,2,28,29,47,17,1,34,5,46,33,41,22,51,53,54,39,48],deprec:[43,20,7],arbitrari:49,manual:6,zoom:[13,44,42,43,22,36],leftrightarrow:49,underli:53,www:[20,3,37,50],right:[11,44,45,47,17,1,3,18,49,31,25,22,8,37,54,7,26],old:19,famili:[49,0,45],deal:20,autobold:49,interv:31,begin:[19,37,15,49,30,51,5,25,53,54,7,1],percentag:[11,45,22],donald:47,successfulli:[0,46],interc:49,dddot:49,bottom:[7,8],subclass:[29,34,24,41,48,10,40],circ:49,tracker:[20,4],overcom:52,condit:[0,30],foo:[40,28],core:[1,30,49,22,54,39,26],plu:[43,29,30],bold:[49,47,21,25,26],insecur:20,popular:[20,35,2],colleg:37,repositori:[14,37,42],post:[29,45,30,4,18,19,52,41],"super":[40,42],llless:49,obj:12,nwarrow:49,slightli:[49,53,8],surround:[20,11,45],unfortun:[20,37],current_theme_templ:2,joomla:2,span:[49,27,5,32,33,21,22,54,35],downharpoonright:49,geramond:49,regist:[0,7,29,47,30,19,52,41,10,39,24,54],jipsen:15,encod:[49,15],bound:49,two:[19,1,15,52,49,43,20,21,22,56,7,25,26],down:[38,37,22],shortparallel:49,wrap:40,ntriangleright:49,stackrel:49,nsupseteq:49,git:[20,14,37,42],suffici:[15,49,20,25,7,55],support:[13,14,45,42,15,20,30,49,3,4,34,43,6,44,23,53,54,7,55,11],transform:54,ngtr:49,avail:[0,2,5,6,14,43,19,20,11,22,23,48,27,32,33,37,7,40,49,44,45,47,1,50,51,53,54],width:[44,50,49,20,25,53],reli:[0,14,47,1,3,51,46,11,53],wordpress:[2,8],editor:8,rightthreetim:49,lnsim:49,longdiv:49,form:[44,45,47,18,49,20,25,22,54,7],offer:[14,42,4],forc:[53,7,45],epsilon:49,hear:[19,29],so4:49,downdownarrow:49,"true":[5,14,45,28,29,49,30,50,43,31,34,22,7,11,9,39,40],maxmacro:25,reset:[50,28],displayalign:22,intern:[0,44,15,29,47,17,1,49,22,53,10,39,24,54],tell:[37,3,51,20,53,7],moveright:49,more:[49,6,8,10,14,42,17,20,21,22,23,28,29,46,39,35,37,38,7,40,41,43,45,47,56,11,51,52,53,54,55,1],retir:14,featur:[13,44,37,49,4,51,19,46,36,53,40],rfloor:49,exist:[45,28,49,20,37,40],ddot:49,backsim:49,triangleq:49,check:[0,14,37,46,18,49,20,29,40],tip:49,abovewithdelim:49,role:54,test:[12,13,14,37,52,30,3,51,19,20,44,7,53,39,40],tie:[30,28],smallsmil:49,scriptstyl:49,searrow:49,mathel:2,intend:[47,40,22],munderov:54,gvertneqq:49,consid:[0,14,42,49,4,5,20,54,39,48,1],omega:49,outdat:4,longer:[29,14,37,18,43,53],furthermor:[1,14,22,7],anywher:7,cancelto:49,tex2jax_ignor:[5,42],ignor:[5,49,33,29],time:[0,3,4,49,6,12,39,42,18,19,25,22,28,46,36,7,41,29,37,1,51,53,54],push:[28,47,17,1,30,51,46,39],"5kb":25,mathrm:49,doteq:49,skip:[5,33,37],consum:18,webkit:42,skin:2,displayind:22,millisecond:[0,45,28,50,18,6,36,39],decid:[7,50],middl:[49,20],depend:[28,30,51,46,8,53,7,55],head:[2,3,51,20,8,53,38,7],decim:[49,31],readabl:47,nearrow:49,varpi:49,certainli:37,vee:49,decis:53,text:[2,30,5,6,8,12,14,42,43,18,19,20,21,22,23,48,25,27,15,3,32,33,35,38,7,49,45,46,47,56,11,51,53,54,1],succnsim:49,sourc:[13,14,45,37,49,3,50,43,44,19,23,53,54,39,48,1,11],string:[0,28,29,49,18,5,56,33,21,22,19,39,48,25],word:[5,33,7,54],room:25,dim:49,getjaxfor:[19,39,24],administr:[2,8],level:[20,7,37,34],did:46,item:[11,45,50,49,46,21],cooki:[12,30,42],div:[12,49,54,35,51],prevent:[49,27,45,42,20,50,5,32,33,25,22,7],mmlorhtml:[43,53,55,22,26],slower:53,compens:11,sign:[49,14,15,5,20,33,54,7],cost:[49,20,7,40,15],pmb:49,rightarrowtail:49,widehat:49,xandi:40,dotsi:49,dotsm:49,appear:[19,34,37,15,46,49,31,18,5,20,33,22,51,8,7,48,50],dotso:49,repli:19,dotsc:49,dotsb:49,current:[0,45,37,2,29,48,20,8,53,38,7,40],backepsilon:49,ampersand:[49,15],inlinemath:[49,14,51,5,20,33,7],defici:44,amalg:49,mathsiz:49,gener:[49,7,15,20,55,30,43,6,35,46,54,39,48],mfrac:[20,54],modif:[1,7],address:[20,37],along:[49,47,1,18,19,35,10,24],wait:[0,7,37,42,28,29,47,17,1,3,51,19,46,30,41,22,52,39],box:[49,0,42,6],html_head:2,shift:22,xtwoheadrightarrow:49,bot:49,queue:[29,34,28,52,16,17,1,30,51,46,47,39],overriden:39,digamma:49,varlimsup:49,commonli:[43,20,47],macintosh:39,semant:40,succsim:49,extra:[19,49,54,22,42],circumv:37,modul:[0,38,34],prefer:[14,45,50,20,53,37,55],iepro7:3,veebar:49,visibl:[49,27,1,51,5,32,33,44],marker:[49,15],myid:56,mobil:[23,53,14,42,7],arrowvert:49,memori:[52,48],bigr:49,visit:20,todai:47,subvers:[20,37],stylesheet:[0,34,28,29,17,30,51,52,22,8,53],handler:[0,34,47,3,30,51,52,22,54,7],xtofrom:49,current_skin:2,bigl:49,bigm:49,eqcirc:49,checkout:37,bigg:49,inputjax:[34,16,48,30,41,10,40],capit:16,reduct:53,peopl:20,bigtriangleup:49,enhanc:[54,42],minscaleadjust:45,visual:[43,23],accept:[46,28,51],hphantom:49,easiest:[19,20,37,28,46],graphic:[47,53,37],prepar:[1,7],cap:49,uniqu:56,pmatrix:49,whatev:[49,2,15,24,1,51,19,40],cal:49,purpos:[46,54],getjaxbytyp:39,downharpoonleft:49,subseteqq:49,varprojlim:49,backslash:[49,25,22],topic:[16,13,7],critic:37,sharp:49,chemic:49,occur:[0,44,37,28,46,17,1,3,50,18,19,20,41,22,7,52,39,29,51],eqsim:49,pink:49,alwai:[28,16,1,49,46,7],multipl:[49,1,14],trianglelefteq:49,write:[29,15,47,1,51,20,23],fourth:1,mathsf:49,tild:49,xhtml:[20,44],map:54,book:47,max:49,clone:37,spot:[49,15],usabl:37,mac:[11,39,45,22],cours:[1,14,44,7],mai:[0,2,3,4,49,6,8,14,16,19,20,11,22,24,15,29,46,39,37,7,40,5,44,45,48,1,51,52,53,54],underscor:[49,20],data:[12,0,34,45,28,46,40,19,20,41,48,37,10,39,24],grow:[53,2],newlin:[49,42,18],vartheta:49,baso4:49,explicit:[0,7,22,20],uparrow:49,produc:[49,6,14,19,20,25,22,23,48,26,28,46,35,53,10,7,29,45,24,50,51,11,54],inform:[0,45,2,29,47,49,18,43,46,11,22,19,54,7],"switch":[14,37,42,49,35,54],preced:[46,7,22],combin:[0,14,42,31,49,43,20,53,7],block:[11,14,45,42,20,3,30,49,6,41,22,54,7],approx:49,comfort:37,lsh:49,tex2math:35,still:[19,44,2,28,29,47,1,43,22,36,53,7],pointer:40,ttf:37,dynam:[0,34,13,1,3,51,20,22,52,23,54,7],entiti:[49,44,42,15],amssymbol:[43,20,49,14,7],conjunct:14,group:[0,44,4],monitor:4,polici:37,mpcontext:43,lucki:49,platform:[23,13,2,20],window:[34,28,6,3,50,18,46,51,53,39],"05em":49,bookmarklet:7,main:[49,14,37,1,16,40,56,50,43,20,34,22,7,53,10,39,24,54],mathexampl:51,non:[12,0,15,17,49,20,53,54],within:[0,30,49,6,14,28,16,20,25,15,39,46,33,35,7,40,42,5,44,37,51,52,54],myinputjax:41,initi:[0,14,15,52,49,30,50,34,5,20,33,41,22,7,19,54,39,48,1],safari:[53,39,3,42],half:46,now:[14,37,42,47,30,43,20,53],discuss:[12,37,7,3,4],nor:[6,21],term:[20,14,7,18],name:[0,30,5,6,7,12,14,28,43,18,19,20,21,22,24,25,26,15,29,3,46,33,37,10,39,40,41,42,49,44,45,48,56],opera:[53,55,39,3,42],boxdot:49,drop:37,separ:[19,14,37,1,49,18,5,20,33,44,22,11,7,56,26],messagestyl:[6,22,18],confid:23,varsupsetneqq:49,compil:46,domain:[20,7,37],replac:[0,14,37,42,44,3,51,49,20,25,7,54,39,40,41],individu:[48,42,26,51],strikethrough:49,continu:[0,14,15,49,19,52,7,1],happen:[44,37,15,17,1,49,52,54],shown:[49,21,22,50,51],accomplish:[20,7,3,37,53],"3rd":20,space:[42,15,31,51,49,20,22,53,9,54],intermix:30,internet:[0,42,3,50,18,49,46,22,53,54,26],formula:[51,22,36,23,53,54],correct:[46,14,3],simeq:49,earlier:[20,1,7,53],migrat:[13,14],ajax:[0,7,16,1,30,34,49,46,41,19,39],mime:[44,48,20,41,10,39,24],underleftarrow:49,brower:[49,15],ord:49,care:[15,31,3,49,20,26],ntrianglelefteq:49,couldn:46,x00b1:20,synchron:[0,28,13,47,17,1,3,51,19,46,30,52,39,29],mscarri:44,thing:[15,47,51,49,20,21],eqref:49,mathop:49,unwis:53,think:[49,22,15,51],frequent:[5,19,33,15],first:[3,49,8,28,19,20,21,22,24,15,29,46,33,37,10,7,5,44,45,1,51,52,54],origin:[40,49,37,15,29,17,3,51,19,20,48,10,7,24],lfloor:49,oni:37,directli:[37,42,1,3,51,49,46,41,8,54],onc:[0,37,28,29,49,30,51,43,20,41,35,53,1],arrai:[30,49,6,9,7,42,17,19,21,22,24,25,26,27,28,29,31,32,33,35,10,39,41,5,45,46,11,53,54,55],yourself:[37,20,17,3,49,46,22,7],fast:[14,42,7],open:[13,44,37,50,49,20,8,23,38],ios4:42,size:[11,45,42,56,51,49,25,53,7],given:[0,2,49,12,15,17,18,19,20,21,22,48,28,46,39,40,41,42,29,24,56,54,1],ifmodul:37,referenec:39,leftrightharpoon:49,circl:49,white:56,conveni:[20,40,22],hub:[0,30,5,6,7,9,11,14,43,16,18,19,20,25,22,24,26,27,15,3,31,32,33,35,36,39,41,49,34,45,46,48,1,50,51,53,54,55],especi:54,copi:[14,37,15,3,4,43,20,44,7,23,39,41],specifi:[30,49,6,9,11,12,14,28,17,19,20,21,22,25,15,29,39,46,33,36,7,42,5,45,47,56,50,52,53,54,55,1],github:[14,37],enclos:[49,54,56,45,22],quad:49,than:[0,30,5,6,7,8,9,14,28,43,17,19,20,41,22,23,48,26,15,29,31,33,37,10,39,40,42,49,44,45,47,56,51,52,53,54,1],serv:[20,42],wide:[23,54,37],instanc:[12,7,48,1,5,33,41,39,40],underbrac:49,were:[19,53,14,48,51],posit:[49,17,45,42],stub:41,browser:[30,5,6,12,13,14,42,43,20,11,22,23,48,26,15,39,3,33,34,35,37,7,49,44,45,47,50,52,53,54,55],preccurlyeq:49,sai:[17,3,28],lnot:49,doublecup:49,nleftrightarrow:49,argument:[29,28,1,49,46,40,26],hskip:49,doctyp:[20,44],engin:[23,13],techniqu:[14,3],npreceq:49,consortium:23,note:[0,3,49,6,8,39,20,21,22,48,25,15,29,46,33,37,7,41,5,45,56,50,51,53,54,55,1],x2260:20,jsmath:[13,54,35],noth:[20,28,46],channel:[19,47],updownarrow:49,surd:[49,42],sure:[49,14,37,42,29,1,4,51,5,20,33,53,7],windowset:50,normal:[5,28,49,3,43,20,33,22,54,56],buffer:25,compress:7,beta:[49,7],pair:[12,0,28,49,5,56,33,21,19,10,39,24,25,26],fileurl:0,beth:49,hotfix:7,latex:[13,15,47,49,5,20,22,23,54,7],renam:14,textarea:[5,33],later:[29,44,45,28,15,17,1,49,46,7,39],drive:37,typeset:[0,30,5,42,18,19,11,22,23,48,27,3,46,33,36,39,34,45,32,47,1,50,51,52,53,54],badg:4,sigma:49,mathfrak:49,showmathmenu:45,show:[49,37,20,4,51,43,6,21,22,46,38,50,26],autoreset:28,parentnod:[3,42],unprocess:[39,48,51],concurr:30,permiss:[20,37,15],hack:53,isfirefox:39,corner:[34,22,18],xml:[23,47],onli:[0,2,3,4,5,6,14,42,43,20,21,22,23,48,15,29,39,46,33,37,10,7,49,45,47,56,51,53],explicitli:[49,14,42,15,46,5,20,33,22,7,40],activ:[14,37,28,47,4,51,43,52,44,54],behind:49,inlinedelimit:49,otim:49,black:49,offici:7,geq:49,mypic:[5,32,33,21,27],nearli:[43,49,7,26],variou:[0,45,2,29,16,56,18,19,6,11,10,7,54,26],get:[30,49,12,13,28,18,20,11,22,15,3,46,37,7,40,42,29,44,45,1,51,53],cannot:[49,15],ncong:49,downarrow:49,nsim:49,requir:[0,5,14,28,46,49,3,43,20,33,41,7,19,23,54,39,24,1],truli:51,prime:49,blind:54,lceil:49,mathpunct:49,consist:[44,15,1,49,21,53],hostil:20,intermitt:[34,18],shortmid:49,apricot:49,retypeset:51,where:[0,30,4,49,6,12,14,28,18,19,20,25,24,15,46,39,37,10,7,43,34,45,48,56,51,52,54],wiki:[2,47,3,49,20,54,7],latexmathml:15,often:[49,20,56,54,15],keyboard:47,ismac:[39,30],concern:[54,39,15],infinit:25,detect:[42,28],parent:[12,40],enumer:49,label:[53,50,26],enough:[44,1,20,21,53,7],between:[49,7,28,15,46,1,50,19,20,53,54,39,48,42],maltes:49,"import":[0,37,42,1,43,52,19,7],across:[47,53],absenc:2,longleftrightarrow:49,vdot:49,screen:[0,42,1,18,43,23,51,24],negmedspac:49,come:[14,37,1,3,43,46,44,53,54,7],leftleftarrow:49,fit:[19,50],timout:0,pertain:20,audienc:[53,44],inconsist:14,overbrac:49,mani:[49,7,42,52,56,5,46,33,53,39,1],among:7,color:[42,47,56,49,21,22],operatornam:49,period:[0,34,37],colorbox:49,colon:[49,56],cancel:[49,28],"70kb":7,bigcirc:49,msrow:44,damag:20,needlessli:46,myserv:7,skew:49,mark:[0,44,15,49,5,20,33,35,54,56],addit:[0,1,14,15,28,20,17,49,51,43,6,44,48,22,46,19,10,39,24,56,42],succapprox:49,fade:6,arcsin:49,xrightharpoonup:49,mathplay:[42,3,50,43,22,53],breve:49,texfont:6,blacktriangl:49,former:31,those:[49,6,39,17,19,20,21,22,23,48,28,29,46,10,7,41,43,44,37,24,56,51,54,1],"case":[3,49,14,16,19,20,21,22,48,26,28,46,37,7,40,45,31,24,56,51,53,54,1],kappa:49,tostr:28,oldstyl:49,addtext:12,trick:49,invok:53,invoc:7,margin:[56,25],opera10:45,advantag:[53,1,14,7,2],barwedg:49,leadsto:49,henc:37,worri:[19,54],destin:39,somewher:7,updatemath:51,bigwedg:49,develop:[14,37,47,4,44,7],author:[14,15,18,49,20,41,22,36,23,54],media:[56,7,37],postjax:[54,22],same:[5,14,37,42,15,20,49,8,27,43,32,33,25,29,19,52,7,24,1],html:[2,30,5,6,7,9,12,13,14,42,16,19,20,21,22,24,26,27,15,3,32,33,34,35,37,38,39,43,44,45,47,49,50,51,52,53,54,55,56],pad:[12,49,56],knuth:47,mathvari:54,document:[0,14,37,47,15,13,16,49,3,51,5,20,44,22,7,23,53,54,39,24,35],bring:54,finish:[47,52,1,3,51],vvdash:49,nest:[44,42,34],availablefont:[6,7,45],someon:49,hslash:49,capabl:[16,23,53],formaterror:39,displaystyl:[49,31,51],extern:[0,34,46,1,19,52,39],submenu:[22,50,8],appropri:[19,49,43,41,35,10,54],macro:[42,49,20,25,22,7,26],mml_svg:[43,7],leftharpoonup:49,overwithdelim:49,without:[0,14,45,6,47,49,19,46,44,11,54,7],model:[13,34,37,16,30,49,53,54,40],bigotim:49,stixfont:6,mml2jax:[44,20,43,32,22,54,26],loaderror:0,when:[0,30,5,6,7,8,9,11,14,15,16,17,18,19,20,25,22,23,24,27,28,29,31,32,33,34,35,36,37,10,39,40,41,42,43,44,45,46,47,21,49,50,51,52,48,53,54,55,1],greasemonkei:[7,3],bitmap:47,flavor:[43,7],speed:[53,54,14,42,7],versu:1,strikeout:49,widest:[20,44],asciimathml:15,nleqq:49,except:[43,20,52,53],littl:[0,29],blog:[2,47,49,20,54,7],rescal:53,treatment:49,yuicompressor:42,earli:[7,42],hover:[50,22,36],around:[49,7,15],read:[14,37,42,47,21,19,20,44,7],outermost:21,boldsymbol:49,messsag:18,getjaxbyinputtyp:39,moo:40,world:[23,46,7],lasterror:39,mod:49,sum_:54,blackberri:42,asciimath2jax_process:33,cdot:49,integ:[49,39],server:[49,14,45,42,3,43,20,37,7],either:[0,14,37,2,29,16,49,3,56,5,20,33,21,7,36,19,53,39,55,25],output:[3,49,9,11,13,14,42,19,20,41,22,24,26,15,39,44,35,7,40,43,34,45,47,48,56,50,51,53,54,55],rollov:42,manag:[12,34,37,2,46,47,30,18,49,20,54,48],lesssim:49,node:12,respect:[11,45,28],inlin:[5,20,33,14],constitut:16,pod:49,slice:28,easili:[23,20,54,47],definit:[0,45,42,49,50,43,25,36,23,11,56],shoveright:49,inputid:48,dashleftarrow:49,mathcal:49,complic:[47,53,21,44,55],refer:[19,7,37,13,48,3,51,43,6,29,41,46,52,39,40,20],arrow:49,power:[1,4],inspect:39,broken:54,thinspac:49,found:[0,37,20,4,46,22,53,10],regexp:[5,33],"throw":[24,10,41,3],trianglerighteq:49,comparison:[1,39],ibook:53,ddddot:49,stretch:49,act:[49,47,1,19,46,25,22,54],industri:47,processor:[49,44,45,1,15,31,47,56,30,50,43,20,25,53,9,7,55,54,26,11],hookrightarrow:49,nobreakspac:49,routin:[12,0,52,46,41,10,39,24],nsupseteqq:49,effici:[40,51],elementari:44,lessdot:49,triangledown:49,compos:44,rightharpoondown:49,mathbackground:49,your:[0,2,3,4,5,6,7,8,9,11,13,14,42,43,20,25,22,23,27,15,31,32,33,35,36,37,38,39,49,44,45,46,47,21,1,50,51,52,53,55],compon:[0,30,49,14,43,16,19,20,23,24,26,15,39,44,10,7,40,29,34,56,50,52,54],log:[49,20,37,18],area:[25,18],aren:49,fontwarn:[6,22,26],lor:49,strict:37,compliant:[14,42],interfac:[37,2,20,8,23,38],lot:[19,25,37],lambda:49,programmat:[54,35],verbatim:49,cloudfront:20,buggi:49,categor:26,faster:[43,53,7,42],pull:37,mathml:[3,49,8,9,38,13,42,20,11,23,48,26,15,10,7,43,44,47,24,53,54,55],bullet:[49,47],possibl:[0,44,37,15,28,6,56,18,43,20,22,46,53,54,7,40,1,42],"default":[0,30,5,6,7,9,11,14,28,43,18,20,25,22,24,26,27,15,32,33,35,36,37,10,39,41,49,45,31,50,53,54,55],processescap:[5,49,14,7],buildrel:49,notag:49,asiimath2jax:15,embed:44,connect:[43,20,54,7,46],taylor:20,creat:[0,30,4,49,12,18,19,41,48,28,46,10,40,29,34,37,47,24,56,50,52,54,1],certain:[19,29,52],leftrightsquigarrow:49,risingdotseq:49,varliminf:49,file:[0,2,3,49,6,7,8,10,14,15,17,18,19,20,21,22,24,26,28,29,30,46,35,38,39,41,42,43,37,31,47,48,56,52,53,54,55,1],outputjax:[34,16,48,30,41,24],fill:[53,55],again:[49,0,39,48,51],iiiint:49,googl:4,pmod:49,event:[0,42,47,3,51,43,52,22,19,54],wai:[2,3,49,14,18,19,20,41,22,27,28,29,32,33,7,5,37,46,1,51,53,54],you:[1,2,3,4,5,6,7,8,9,11,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,31,32,33,35,37,38,39,40,41,42,43,44,45,46,47,49,50,51,52,53,54,55,56],trash:48,poor:53,resolut:23,sequenc:[13,7,37,17,49,30,19,52,39],symbol:[49,20,15,31],mhchem:49,begingroup:49,dashv:49,track:[54,4],menuset:[43,22,36],reduc:[49,7],mathcolor:49,lbrace:49,directori:[0,45,42,52,47,48,30,18,43,20,41,22,19,37,10,7,24],descript:[27,32,3,5,6,33,34,22],lbrack:49,hello:46,calle:40,potenti:1,extpfeil:49,escap:[49,25],dst:39,negthickspac:49,lvertneqq:49,all:[0,2,3,5,6,7,13,14,42,43,18,19,20,41,22,23,26,27,28,29,30,32,33,34,39,40,49,44,37,46,47,1,52,53,54],consider:7,illustr:51,dollar:[49,14,15,5,20,33,7],mathjax_displai:56,abil:[14,37,42,47,53,54],follow:[19,14,45,42,28,46,16,49,30,51,43,20,21,56,37,54,7,40,41,26],alt:[3,22],disk:[43,20,7,37],multlinewidth:25,scr:49,articl:47,init:40,program:[34,2,52,16,48,1,30,20,23,54,40],smile:49,cgi:0,introduc:[20,7,53],liter:[5,49],multlin:[49,25],vert:49,far:[0,29,37,15,18],varrho:49,"1px":[12,49,56],verb:49,mechan:[49,28,29,17,1,30,19,52,40],difficult:[46,44,52],loadcomplet:[49,0,39,41,7],veri:8,preferredfont:45,alterant:47,list:[2,30,49,6,8,9,38,7,16,19,20,25,22,24,27,28,32,33,36,37,10,39,5,45,31,47,48,1,50,51,11,54,55],"_html":53,emul:53,adjust:[45,3,51,11,8,38,7],plain:49,small:[45,42,18,49,25,54],dimens:[49,42],getalljax:[39,51],foreground:56,lll:49,tex:[2,3,5,6,7,8,9,10,13,14,42,43,19,20,25,22,23,26,27,15,34,35,37,38,39,41,49,44,45,47,1,51,53,54],zero:[6,17],design:[44,3,4,43,23,38],pass:[0,14,42,28,29,17,1,30,50,43,46,19,54,39,40,26],overlin:49,further:[17,54,41,1,53],what:[0,4,49,6,13,39,28,20,11,22,23,27,15,32,33,36,7,42,5,44,45,50,51,54],sub:34,section:[3,5,6,7,9,11,14,42,43,25,22,26,27,15,31,32,33,35,36,38,39,49,44,45,46,50,53,55],advanc:[16,13,23,7],abl:[19,14,45,28,2,20,49,3,51,43,6,44,22,8,23,37,38,7],delet:45,version:[13,14,37,42,15,51,30,3,4,34,43,20,41,7,36,48,53,10,39,24],sup:49,"public":[29,37],hasn:[0,10,14,24,18],full:[0,42,46,16,3,51,43,20,22,23,7],themselv:[34,30,43,20,21,39],geqslant:49,modular:[23,44],ggg:49,trunk:37,standard:[19,37,47,49,43,20,23,53,54,7,56],modifi:[13,14,2,51,49,18,43,20,41,7,19,39,24],valu:[0,30,49,6,9,12,42,17,19,21,22,25,26,27,28,31,32,33,36,39,40,5,44,45,46,56,50,51,11,54,55,1],search:[23,13,39,4],sender:19,prior:[49,53,44,22],amount:[49,6,25,28],action:[0,7,15,28,29,34,17,49,3,18,19,46,30,41,47,36,52,54,39,51,1],mathjax_wikipedia:3,mml_htmlormml:[14,2,3,43,20,8,53,38,7],llap:49,via:[0,2,30,5,6,14,42,18,19,20,41,48,26,28,3,33,36,37,7,40,43,44,45,1,54],shorthand:51,filenam:[46,14,3,7],href:[49,21,42],inappropri:19,emptyset:49,simbl:3,decrement:17,establish:43,select:[44,37,45,50,43,11,53,39],hexadecim:49,proceed:[1,21],x41:49,distinct:16,ctrl:22,stretchi:49,rightsquigarrow:49,taken:[19,49,1,51,53],imath:49,ispc:[39,30],toggl:49,vec:49,flat:49,diamond:49,desir:[43,40,3,37],mlongdiv:44,ital:[49,0,47,22,20],flag:22,aleph:49,particular:[12,0,7,37,15,28,46,47,17,56,49,20,29,22,52,53,54,39,40],known:1,upsilon:49,mathml3:44,cach:[19,7],showmathmenumsi:[11,42],none:[29,27,45,28,46,5,32,33,22,54,7],outlin:42,det:49,dev:4,histori:[19,29,30,47],remain:[43,47],paragraph:[49,6,54,51,20],ie6:45,caveat:[20,37],def:[49,25,40],deg:49,mathtip:49,scan:[39,22],myspan:21,challeng:43,registr:41,share:[20,7,37,4],templat:[38,7,2,8],succneqq:49,minimum:[39,45,42],unreli:14,explor:[0,42,3,50,18,49,46,22,53,54,26],phrase:[49,20,15],mathinput:51,huge:49,rowspan:44,goal:23,awkward:40,secur:[20,3,37],rather:[0,30,5,6,9,14,42,43,17,19,20,41,22,23,48,26,28,31,33,7,40,49,44,37,47,56,51,52,53,54,1],anoth:[49,37,29,17,1,18,19,52,10,51,54,26],showmathmath:11,csc:49,snippet:[12,13,27,32,49,4,5,6,33,21,22,39],ddagger:49,stix:[45,42,47,49,6,37,53,54,7],simpl:[53,21,22,18],css:[0,3,49,6,9,13,14,42,20,11,22,24,26,39,44,35,36,37,7,43,34,45,47,48,56,50,51,53,54,55],unabl:6,resourc:42,referenc:6,algebra:47,mtabl:43,variant:47,reflect:[30,51],vdash:49,mstack:44,impliedbi:49,associ:[11,45,28,48,51,49,46,41,10,39,24,54],welcom:4,lhd:49,footer:7,onto:[47,20,1,39,51],ambigu:16,caus:[0,49,6,39,18,19,20,25,22,48,15,29,46,33,34,7,41,5,44,37,1,50,51,54],callback:[0,34,28,29,16,17,1,30,51,19,46,41,47,52,39,48],firefox3:45,merror:56,unrhd:49,help:[13,14,37,4,20,50,53,7],soon:[7,3,22,51],trade:[53,7],through:[49,14,37,42,29,1,50,19,52,44,53,54,7,40,26],hierarchi:[7,37],suffer:53,paramet:[0,30,49,12,14,28,17,18,20,25,22,24,26,27,15,29,32,39,10,7,40,41,42,43,46,48,51],style:[0,30,49,6,12,13,42,18,20,21,22,48,33,36,39,5,45,47,56,50,11,54],arial:[49,45],border:[12,49,56],x221a:44,processupdatetim:39,x221e:54,late:[47,3],isreadi:[34,30],pend:17,amsmathaddit:1,processenviron:5,might:[0,14,37,46,1,4,19,20,25,7,54,44],alter:[5,51],cee:49,good:[1,3,4],"return":[12,0,44,40,28,29,17,1,52,18,19,46,41,51,48,10,39,24],textstyl:49,longleftarrow:49,getelementbyid:51,wilipedia:47,rlap:49,xtwoheadleftarrow:49,mathscr:49,instruct:[21,20,14,3,2],bigcup:49,ntriangleleft:49,iff:49,iint:49,fulli:[20,1,44],unicod:[49,6,44,45],x2211:54,subsystem:30,originaltext:48,weight:[21,40],hard:[37,42,4,43,20,7],realli:[46,22],nless:49,expect:[49,1,7,22],math2:49,math1:49,beyond:[49,4],orient:[16,40,34,30],"try":[37,4,19,20,41,40],looparrowright:49,shortcom:52,skiptag:[5,33],print:[23,53,56,37],occurr:52,msie:[11,39,55],difficulti:49,assist:43,safari3:45,ast:49,offsetx:45,symbian:42,mml:[34,55,43,20,53,10,7,48,54],reason:[0,44,15,46,1,3,50,18,49,20,25,39,41],base:[14,45,37,2,52,16,30,3,34,6,41,48,23,53,7,40],put:[0,14,37,15,52,49,20,7,26],mathr:49,offseti:45,basi:[53,7,55],succnapprox:49,stanard:49,drupal:2,msbm10:20,showprocessingmessag:[22,26],perhap:[46,7],bumpeq:49,perman:49,elementjax:[34,16,30,41,10,48],stixgener:[49,45],getelementsbytagnam:3,assign:[5,46,33],major:[23,53,7,3],notifi:19,boxplu:49,upper:49,feel:4,exchang:47,lastnam:46,number:[0,2,49,6,14,42,18,20,21,22,24,25,28,46,39,10,7,41,43,34,37,31,48,1,53],fadeoutstep:6,done:[17,1,30,49,20,54,7],least:[54,39,7,15],blank:[29,28],stabl:[20,7,37],miss:[49,15,28],differ:[49,7,37,28,46,1,51,19,20,52,54,39,40],script:[0,2,30,5,8,10,12,14,42,43,19,20,41,22,24,39,3,33,35,38,7,49,37,48,1,51,53,54],interact:[23,20,54,7,48],smoother:6,construct:[54,1],statement:[1,28],exten:15,illeg:[21,42,7],store:[12,29,14,45,42,28,48,1,51,46,34,35,7,10,39,24,54],xmln:20,option:[5,6,8,9,13,14,43,20,25,22,26,27,15,39,32,33,35,36,7,40,41,49,45,31,21,50,11,54,55],nleftarrow:49,triangleleft:49,ntrianglerighteq:49,selector:[56,22,18],tex2jax_process:5,part:[5,44,37,15,28,52,49,8,3,43,20,25,22,19,23,53,54,7,40,1],pars:[49,42,15],mmltoken:49,binom:49,cosh:49,kind:54,aaa:25,prebuilt:20,whenev:[29,44,37],remot:37,remov:[49,7,42,29,48,18,5,6,33,22,51,54,39,24],dtd:20,bridg:[14,48],arrang:28,markup:[0,44,15,47,49,20,54],ffff88:56,comput:[45,37,47,49,53,39],nleqslant:49,packag:[37,15,47,49,35,7],expir:12,"null":[12,0,34,45,42,28,29,40,3,18,6,41,22,51,48,10,39,24],built:[13,14,3,53],equival:[12,28,1,51,43,46,21],lim:49,self:[20,44,42],ell:49,also:[3,4,5,12,14,28,43,16,18,19,20,11,22,48,15,46,37,7,40,49,44,45,47,50,51,52,53,54],brack:49,build:20,brace:49,distribut:[20,38,14,37,7],appendchild:[12,3],addel:12,reach:7,ignoreclass:[5,33],react:29,most:[19,34,37,2,28,47,30,49,3,43,20,41,53,7,40,56,42],plan:20,rho:49,alpha:49,rhd:49,vardelta:49,renewenviron:49,clear:[29,45,28,30,18,19],tpl:2,h2o:49,exp:49,latest:[14,37,2,3,4,51,49,20,35,8,53,38,7],leftroot:49,cdata:42,nshortparallel:49,carefulli:[21,45,51],cdn:[49,14,37,42,2,3,51,43,20,35,8,53,38,7],finv:49,particularli:[43,37],rightleftarrow:49,font:[0,49,6,13,14,42,18,20,21,22,23,25,37,7,11,45,47,56,50,51,52,53,54],find:[7,4,51,49,6,35,8,54,39],preremoveclass:22,execut:[0,28,29,17,49,30,19,46,54,7,1],pretti:37,solut:[20,54,37,4],delayedx:28,queu:[17,1,7,28,29],factor:[11,45,22,42],noerror:[43,20,49],tagsid:[25,26],precnsim:49,express:[19,29,49,51,5,20,33,25,22,53,1],strut:49,nativ:[44,16,3,43,11,23,53,54,55],mainten:14,rest:[0,44,1,51,49,20,23,54],konqueror:[53,39],restart:[37,17,1,5,33,7],ie9:[53,37,42],ie8:[53,42],ie7:53,acut:49,vmatrix:49,common:[13,14,15,2,20,47,49,44,43,6,21,7,39,41],set:[0,30,5,6,7,9,12,14,15,43,18,19,20,25,22,48,26,27,28,29,3,31,32,33,35,36,37,39,40,42,49,34,45,46,47,21,56,50,51,52,11,54,55,1],overrightarrow:49,startup:[13,7,42,51,3,1,30,34,19,41,22,39],see:[0,30,4,5,6,7,8,10,14,28,43,17,19,20,11,22,26,27,15,29,32,33,35,36,37,38,39,42,49,44,45,46,47,56,50,51,52,53,54,1],barb:49,sec:49,arg:49,ams_hml:7,disadvantag:53,langl:49,inconveni:14,someth:[49,37,4,51,5,20,22],particip:4,won:[1,7,37,42],columnspan:44,subscript:[49,20,42],experi:22,altern:[0,15,49,46,54,40],numer:[39,44],complement:49,javascript:[0,2,3,49,6,8,11,13,14,16,19,20,21,22,23,48,25,26,28,46,36,38,7,40,43,34,45,47,56,50,51,52,53,54,1],isol:[49,42],mailbox:[19,47],bmatrix:49,consumpt:42,distinguish:10,longrightarrow:49,errat:7,classnam:3,popul:30,closur:[46,28,51],last:[0,37,28,17,56,49,39,26],delimit:[49,14,42,15,5,20,33,54,7],hyperlink:54,mathzoom:[43,56,36,26],nvdash:49,grei:49,context:[5,33,50,22,28],overset:49,hbar:49,whole:[52,39,51],load:[0,2,3,49,7,10,13,14,42,17,18,19,20,41,22,23,24,28,29,30,46,35,38,39,43,34,37,47,1,51,52,53,54],markdown:[49,20,54,47],simpli:[5,14,37,15,28,46,17,49,51,43,32,33,27,22,7,23,39,41,35],point:[49,17,7,31,20],instanti:40,schedul:46,usemathmlspac:9,fcolorbox:49,header:[7,37,2,8],suppli:[39,48,22,28],bigve:49,mistak:21,zeta:49,throughout:49,becom:[14,37,28,1,4,19,44,53,40],notaion:13,gneq:49,devic:[23,53,14,42,7],due:14,empti:[34,45,28,1,30,22,54],otherwis:[0,7,28,49,18,43,20,34,8,53,39,40],invis:[49,37],fire:[30,7,3,46],imag:[14,45,42,32,47,3,27,5,6,33,21,23,37,7],descib:15,coordin:[17,54,1],understand:[43,54],demand:43,urcorn:49,convers:[49,15],blacksquar:49,look:[12,49,44,45,28,2,29,56,15,4,18,5,20,33,51,8,37,54,39,26],bcancel:49,solid:[12,49,56],histor:53,pitchfork:49,lvert:49,"while":[12,0,14,37,20,55,49,3,31,19,6,44,22,52,54,7,29,1],blacktriangleleft:49,nprec:49,abov:[12,14,45,15,28,20,1,3,31,51,49,6,22,46,37,7,40,42],circlearrowright:49,bowti:49,everyon:19,loop:[25,48],pack:42,subsect:41,measuredangl:49,vartriangl:49,eqslantless:49,biguplu:49,itself:[49,14,37,1,28,29,17,56,30,34,19,44,22,7,48,54,39,40,41,26],overleftarrow:49,limit:[12,0,44,49,31,25,7],rightarrow:49,xleftarrow:49,shorten:18,shorter:42,am_htmlormml:[43,20,7],redisplai:18,conflict:[49,54,42],higher:7,upuparrow:49,optim:[53,42],wherea:49,domin:47,alert:[19,46,1,28],jsmath2jax:[27,35,26,42],temporari:7,user:[3,4,49,6,13,18,19,20,11,22,23,28,35,36,37,7,43,44,45,50,51,53,54],robust:[19,47],stack:25,recent:[23,3],lower:[34,42,16,30,18,49,22],task:49,older:[44,7],entri:[49,17,56,42,47],searchabl:23,ngeqq:49,textit:49,curvearrowleft:49,normals:49,scriptsiz:49,fallingdotseq:49,explan:[49,20],rvert:49,obscur:[42,18],press:22,amp:[49,42,15],regardless:51,cup:49,setscript:12,blacklozeng:49,endgroup:49,ffeeee:49,rgb:49,input:[3,49,8,9,38,14,42,19,20,41,22,24,25,26,15,31,39,34,35,10,7,40,43,44,47,48,1,51,53,54],subsequ:[49,41],sin:49,oslash:49,asciimath:[13,15,31,47,43,20,33,23,7,26],format:[13,14,45,15,47,48,49,11,43,20,21,22,23,53,10,44,24,54],big:[49,26],moodl:2,intuit:47,tomathml:[43,48],game:49,insert:[49,27,28,3,5,32,33,41,22,8,38,39,24,54],bit:[11,40],diagup:49,semi:56,varkappa:49,signal:[29,7,28,52,16,30,34,19,46,41,47,39],altough:46,resolv:42,collect:[28,47,56,46,48,1],api:[16,13,23,20],mathrel:49,swarrow:49,asciimath2jax_ignor:33,scrip:14,gtrless:49,creation:[10,30],some:[2,3,49,6,14,15,16,17,19,20,41,22,23,24,26,28,46,39,37,10,7,40,11,44,45,48,1,51,53,54,55],back:[37,15,20,49,6,33,48],endtoggl:49,global:[34,28,16,51,49,53],urgent:7,sampl:[37,52,56,30,51,19,20,22],instal:[13,14,45,42,20,37,49,6,8,23,53,7],scale:[45,42,49,11,22,23],substitut:25,mathemat:[0,3,5,6,8,10,11,7,42,43,19,20,25,22,23,24,27,15,32,33,35,36,37,38,39,41,49,44,45,47,48,1,50,51,53,54],larg:[49,0,14,7],prod:49,reproduc:51,sqsubseteq:49,tex2jax:[5,14,42,51,49,3,34,43,20,44,22,54,7,26],machin:[47,37],garamond:49,previou:[46,1,29,28,18],run:[0,3,5,6,9,39,17,19,20,25,22,27,28,30,31,32,33,37,7,29,44,45,46,1,51,52,11,54,55],doteqdot:49,odot:49,step:[6,54,30,2,20],hookleftarrow:49,varsubsetneq:49,carol:49,impos:37,ngeqslant:49,reappear:18,materi:[42,51],dialog:42,rangl:49,succcurlyeq:49,gamma:49,file3:1,file2:[0,1],file1:[0,1],file4:1,bmod:49,msam10:20,prec:49,notat:[15,47,49,20,23,54,7],isjax:39,chang:[49,14,45,42,2,31,3,50,18,43,20,25,7,37,53,54,39,48,51,11],announc:52,triangl:49,question:[20,41,4],submit:4,custom:[49,42,15,18,43,20,23,53],adjac:42,perp:49,includ:[0,1,2,3,5,6,7,9,11,14,15,16,19,20,25,22,23,26,27,28,30,31,32,33,34,35,36,37,10,39,41,42,43,44,45,46,47,21,49,50,51,53,54,55,56],suit:[14,6,31,44,7,20],nativemml:[44,47,55,50,43,11,53,54,24,26],overleftrightarrow:49,ulcorn:49,properli:[12,0,14,37,42,20,48,1,3,51,6,44,46,39,40],poster:29,atop:49,loadhook:[0,39,46],serif:[49,0,45],link:[14,37,42,2,20,16,49,6,52,7],translat:[54,10,41,24,42],delta:49,line:[49,14,37,42,2,31,47,30,3,5,20,33,27,53,54,7,26],enspac:49,rmoustach:49,qquad:49,divideontim:49,geqq:49,similar:[52,37,28],xmapsto:49,enlarg:36,constant:[19,25],doesn:[19,45,28,15,48,49,3,43,22,37,7,40],repres:[12,49,27,20,47,56,18,5,6,33,21,22,23,32,24,54],"char":49,mathdiv:[12,46,1,51],tbinom:49,home:[47,0,15],ebook:53,improv:[14,42,4,22,53,7],phantom:49,iiint:49,titl:[20,51],sequenti:[52,1,30],invalid:[49,21],llcorner:49,toaudibl:48,bracket:[49,21,22],shoveleft:49,xrightarrow:49,department:37,supseteq:49,nice:3,lozeng:49,delayclear:45,msup:[20,54],alttext:32,varsubsetneqq:49,eval:28,fisher:49,newcommand:49,svn:[20,14,37],rightharpoonup:49,land:49,mimetyp:[48,10,41,24],svg:[42,47,43,53,54,7],supseteqq:49,depth:49,dot:49,leak:48,aquamarin:49,scroll:38,prototyp:40,code:[0,3,4,5,7,8,12,13,14,43,17,19,20,21,22,27,28,29,30,32,33,39,49,34,46,47,56,51,52,11,1],partial:49,edg:53,queri:54,tiddlywiki:2,edu:37,privat:[52,41,37],elsewher:51,friendli:20,send:[19,29,7],becam:47,sens:54,sent:[19,29,39,47],actiontyp:45,unzip:37,gnsim:49,xxxxxxxx:[20,37],mous:[45,42,50,43,36,54],untouch:49,tri:[49,0,14,45],ischrom:39,mathit:49,button:37,geograph:7,fewer:43,nleq:49,xcancel:49,userscript:3,maction:[49,45,42],pleas:[21,4],impli:49,smaller:[43,0,42],fortun:19,arctan:49,natur:[23,20,49,37,54],varupsilon:49,download:[0,14,37,42,6,20,22,23,54,7],hspace:49,click:[49,45,50,43,11,22,36,8,54],append:[12,37],compat:[42,47,49,22,53,7],index:[20,37,2],compar:53,access:[49,37,42,2,46,48,1,50,43,20,29,23,53,7,40],acronym:47,mathjax:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56],backprim:49,vargamma:49,varsigma:49,leq:49,intercept:20,let:[14,37,44,3,50,49,20,21,22,39,55],sinh:49,vertic:[5,33],sinc:[0,49,14,28,43,17,19,20,11,22,25,15,39,7,40,42,29,44,56,51,52,53,54,1],tex4ht:54,rtime:49,convert:[13,44,15,28,49,3,18,5,35,23,54,24],sqcap:49,larger:[43,20,54,7,53],technolog:[43,23,4],zscale:22,circledast:49,typic:[49,37,15,5,20,10,7],honor:37,chanc:[5,19,33,29,20],firefox:[37,42,3,53,39,55],rgroup:49,bittersweet:49,appli:[49,37,7,40],iskonqueror:39,lessgtr:49,"boolean":39,smallmatrix:49,oval:49,cloud:[14,7],from:[0,2,30,5,7,10,13,14,42,43,18,19,20,25,22,24,27,15,29,3,32,33,35,37,38,39,40,41,49,34,45,46,48,1,50,51,53,54],zip:[20,37,42],commun:[19,13,4,20],chi:49,doubl:[43,49,25,22,36],upgrad:[6,37,4,13],varphi:49,cho:49,implic:37,few:[49,20,37,35,15],msqrt:[20,54],simpler:18,newmath:51,src:[5,14,2,20,49,3,27,51,43,32,33,21,35,7,8,53,38,39,1],nsubseteq:49,lippman:15,doublebarwedg:49,projlim:49,"4ac":20,actual:[12,0,44,15,28,17,49,51,19,46,22,7,10,39,24,1],versionatleast:39,account:12,alik:3,retriev:12,augment:[40,10,41,24],scalabl:[47,53],underwai:1,aperson:46,halt:52,thin:25,control:[5,6,9,11,39,43,20,25,22,27,32,33,36,37,7,49,45,31,56,50,53,55],tau:49,tar:37,process:[0,3,5,7,12,13,14,42,43,17,18,19,20,25,22,24,26,27,15,30,32,33,35,10,39,41,49,44,46,48,1,51,53,54,55],dfrac:49,preformat:42,high:[23,53,54],tag:[2,30,49,8,14,42,19,20,21,22,24,25,26,15,39,3,32,33,35,10,7,5,44,37,48,51,54],tab:37,tan:49,delai:[0,7,45,28,29,50,18,43,22,36,19,39],fontwarns:56,gcd:49,importat:16,getelementsbytagnamen:3,subdirectori:[37,10,24,48],instead:[49,14,37,42,15,46,17,1,51,19,20,54,7],class4:40,class2:[5,33,40],smallfrown:49,sim:49,class1:[5,33,40],simplesup:40,frac:49,overridden:[45,24,18,41,48,10,40],mspace:[49,20,44,42],"_svg":53,anothermethod:40,frak:49,filtertext:18,redund:[40,22],essenti:[43,49,54,40,15],light:[49,40],correspond:[39,45,35,7],element:[30,5,6,12,39,42,43,19,20,21,22,24,29,33,10,7,40,49,34,45,48,56,51,52,54,1],issu:[0,44,4,18,22,53,54,7],newextarrow:49,allow:[2,3,49,14,42,18,19,20,21,22,23,25,29,46,36,37,7,40,43,45,47,56,50,11,1],fallback:[37,45],mjx:12,fastest:53,move:[37,14,45],nsucc:49,comma:[56,3,49,22,7,26],dagger:49,mathjax_tooltip:45,movabl:[38,2],chosen:53,clickabl:49,coth:49,varxi:49,therefor:49,pixel:[47,45],multimap:49,crash:22,pure:44,handl:[0,14,42,15,52,47,49,3,11,34,19,6,44,7,53,1,39,55,41],supsetneq:49,nokia:42,innermost:21,dai:12,automat:[17,1,18,49,20,41,53,54,7,40],front:[43,42],successor:35,gggtr:49,sourceel:[19,48,24,51],anyth:[19,26,4],edit:[43,7,2,8],class3:[5,33,40],februari:13,mode:[49,45,42,5,20,35,37,53,54],varomega:49,"2em":49,genfrac:49,subset:49,delaypost:45,nointerest:29,meta:53,"static":40,our:[14,37,42,4,20,38],rightleftharpoon:49,helpurl:50,special:[5,44,15,46,49,43,20,33,22,7,52,23,53,54,39,56],out:[0,14,45,37,1,19,6,11,53,54],variabl:[34,28,16,3,30,51,49,46,53,40],lesseqqgtr:49,matrix:49,categori:1,suitabl:49,rel:[0,11,45,42],moveabl:[38,2],merg:[12,39],ref:49,red:[49,20,21],negthinspac:49,nsucceq:49,insid:[42,2],workflow:44,manipul:51,eqslantgtr:49,releas:[20,7,3,37],bleed:42,indent:[25,22],could:[0,14,15,46,16,49,4,51,19,20,44,7,54,39,48,1],ask:[4,51,20,25,54,7],succ:49,keep:[14,37,2,15,47,51,49,20,54,7],gtreqqless:49,length:3,outsid:[5,53],"0em":[56,22],uproot:49,softwar:[43,20,54,23],rbrace:49,blogger:2,rbrack:49,precapprox:49,spadesuit:49,date:[20,14,37,42,7],uplu:49,clubsuit:49,bigsqcup:49,suffic:20,"long":[49,20,1,42,50],start:[0,14,37,15,28,13,49,30,52,54,19,20,21,1,22,8,38,7,29,41],unknown:44,respond:[29,22,4],system:[45,37,2,20,16,4,49,6,23,53],messag:[0,14,37,47,20,16,49,30,52,18,43,6,34,41,22,19,39,29],attach:[19,49,52,29],attack:20,termin:[5,33],man:20,iota:49,rsh:49,supset:49,"1em":[56,44],gtreqless:49,hdashlin:49,xlongequ:49,ipad:42,preceq:49,gtrdot:49,subsetneq:49,structur:[0,7,28,46,47,51,19,20,34,39,26],charact:[49,44,45,42,15,31,47,56,5,6,33,25,22,53,54],htaccess:37,seriou:54,bet:37,exhibit:37,"function":[0,7,28,29,47,17,49,3,51,19,46,30,41,52,54,39,40,1],biggl:49,biggm:49,rrightarrow:49,unkown:39,lightli:53,close:[44,42,20,4,43,6,26],need:[0,1,2,3,4,5,6,7,8,10,14,15,17,18,19,20,25,22,23,24,28,30,46,33,37,38,39,40,41,42,43,44,45,31,47,48,49,11,51,52,53,54,56],turn:[12,5,14,28,29,43,33,44,11],biggr:49,gdef:49,min:49,mid:49,which:[2,30,5,7,10,14,15,43,18,19,20,21,22,24,25,26,27,28,29,3,32,33,34,35,36,37,38,39,40,42,49,44,45,46,48,56,51,53,54,1],hbox:49,mit:49,singl:[0,14,15,28,52,16,49,51,5,20,33,34,23,1,7,56,42],declaremathoper:49,mathjax_preview:[27,5,32,33,22,54],x22d6:49,unless:[20,42,28,53],who:[19,29,4],leftthreetim:49,why:49,underset:49,placement:42,url:[0,14,37,42,49,3,50,43,20,7],gather:49,request:[0,42,29,49,30,19,46,7,1],face:[45,4,49,6,25,37,26],inde:[53,3,26],movablelimit:42,nmid:49,determin:[7,45,2,30,49,31,11,22,39],flux:1,occasion:7,fact:[29,14,41],backsimeq:49,mathjax_messag:18,leftarrowtail:49,verbos:[47,46,22],bracevert:49,woth:44,curlyeqsucc:49,highest:53,locat:[0,14,37,6,49,30,51,5,32,33,27,22,7,19,54,39,24,20,35],jax:[30,49,9,14,42,16,19,25,22,24,26,15,3,31,39,35,10,7,40,41,43,34,45,47,48,56,11,51,53,54,55],vartriangleright:49,forev:3,should:[3,5,7,8,38,14,28,43,17,20,21,22,24,25,15,29,46,33,35,10,39,41,49,44,37,47,56,51,53,55,1],imagefont:[6,45],vartriangleleft:49,suppos:[46,14,7,51],"5px":[12,49],triangleright:49,"5pt":20,local:[49,37,28,20,1,3,51,43,6,22,7],hope:[6,14],precsim:49,liminf:49,woff:37,expres:49,increas:[14,42],bigstar:49,leqslant:49,smash:49,enabl:[49,14,15,2,5,20,33,8,38,7],organ:54,frown:49,stuff:39,she:53,contain:[0,2,3,5,6,12,39,43,16,17,18,19,20,41,22,48,27,28,29,32,33,37,7,49,34,45,46,56,51,54,1],view:[44,45,16,3,43,20,35,23,37,7],conform:20,frame:18,apolog:14,temporarili:18,troubl:20,issafari:39,asynchron:[0,34,28,29,47,17,1,51,19,46,52,39],statu:[0,37,46],error:[0,14,15,49,3,4,43,20,44,22,10,39,24,41],jmath:49,pattern:[5,33,22],thumb:1,gtrsim:49,favor:14,state:1,quickest:20,theta:49,neither:[6,21],equiv:[49,53],omicron:49,nshortmid:49,"2pt":49,kei:[12,0,28,29,17,19,22,39],texttip:49,"2px":49,entir:[39,22,7,51],closebox:6,ker:49,thank:15,skipstartuptypeset:22,plugin:[2,50,49,22,8,23,53,54],admin:[38,8],nabla:49,equal:[49,1,39,40],gnapprox:49,etc:[47,1,51,49,22,7],eta:49,equat:[5,27,45,42,20,37,49,31,51,43,32,33,25,22,23,53,54,48],eth:49,limiti:37,lmoustach:49,onchang:51,comment:[49,42,56,43,20,22,7],varnoth:49,arriv:[19,52],solv:[7,3],harpoon:49,arguement:46,sqcup:49,quit:[53,51],showfontmenu:50,"55em":49,quotat:56,bbb:49,defint:49,sqsupseteq:49,treat:[49,20,15],immedi:[0,17,1,30,51,19,7],smallsetminu:49,both:[0,14,42,15,46,47,49,30,43,20,44,22,7,8,53,38,39,40,1],alignat:49,varsupsetneq:49,otf:[37,42],psi:49,x_2:49,togeth:[14,28,1,43,44,39],x_1:49,injlim:49,present:[29,44,4,6,22,53,7],cot:49,twoheadrightarrow:49,multi:49,iscallback:28,displaylin:49,align:[49,20,56,44,22],contextu:[13,44,45,50,43,11,22,36,53,54,48],studentdisplai:51,defin:[30,49,6,14,20,25,22,26,15,3,46,39,36,7,40,41,43,45,56,50,11,1],glossari:[47,13],layer:[42,2],almost:49,curvearrowright:49,site:[49,14,37,2,43,20,22,23,38,7],archiv:[20,37],substanti:[53,14,7],revis:37,greater:[49,53,15],curlywedg:49,parti:[19,20],cross:37,sqrt:[49,20,54],getx:40,extensiondir:41,oint:49,android:42,cssid:[49,42],curlyve:49,phi:49,http:[14,37,2,3,50,51,49,20,35,8,53,38,7],d3eoax9i5htok0:20,lleftarrow:49,"8em":[49,25],effect:[17,1,3],student:51,php:[2,8],executehook:[29,28],off:[49,42,43,52,11,53,7],center:[49,20,56,22],well:[19,44,37,28,46,56,4,51,43,20,33,41,22,52,53,7],exampl:[0,3,4,49,6,7,9,11,12,14,15,17,19,20,25,22,24,26,27,28,29,31,32,33,34,35,36,37,10,39,40,42,5,44,45,46,21,56,50,51,52,48,53,54,55,1],command:[44,37,28,47,17,1,30,51,49,22,7,39],choos:[49,20,53],undefin:[49,20,28,46],setx:40,subsetneqq:49,sibl:42,usual:[28,15,46,1,49,6,41,22,54,7],curlyeqprec:49,paus:37,less:[49,37,15,5,20,33,54,39],obtain:[49,14,37,51,43,20,22,54,7,24],mistaken:54,mathclos:49,mathoutput:51,simultan:[1,30],web:[2,30,49,6,13,14,42,19,20,22,23,48,15,3,35,45,7,29,37,47,1,51,52,53,54],current_them:2,smith:46,textbf:49,cdotp:49,atopwithdelim:49,valid:[46,14],match:[5,29,33,45],webpag:35,piec:42,varpropto:49,punctuat:42,cpan:49,know:[49,46,3,19,20,29,10,7,24,54],cfrac:49,mathinn:49,redesign:53,tick:[49,20,33,15],recurs:[39,42],mho:49,nofont:6,like:[3,49,28,17,18,19,20,23,26,15,29,46,33,35,10,7,42,5,44,37,31,47,56,51,52,54,1],lost:46,messagehook:[19,29,39],necessari:[7,20,23,53,39,48],resiz:53,page:[2,30,5,6,7,8,12,13,14,42,43,16,18,19,20,11,22,23,48,27,15,29,3,32,33,35,37,38,39,49,44,45,46,47,1,50,51,52,53,54],didn:49,captur:47,linux:39,"export":48,superclass:40,proper:[29,39],guarante:[0,1,51,17],peter:15,librari:[16,1,34,37],glyph:[49,47],kern:49,rspace:49,assum:51,avoid:[14,42,15,49,21,22,53,54,44],tooltip:[49,45],checkmark:49,leav:[12,15,51,49,25,55],doublecap:49,supsetneqq:49,preload:[0,20],twoheadleftarrow:49,mpmous:43,daleth:49,upharpoonright:49,journal:47,usag:[49,13],host:[14,7],sphericalangl:49,although:[16,20,37,55,29],offset:45,panel:49,varepsilon:49,about:[4,49,6,14,28,19,20,11,22,15,29,31,39,37,7,42,43,45,46,51,52,54],ams_html:[49,14,51,43,35,7],rare:1,column:25,mathajx:14,mod_head:37,mapsto:49,constructor:40,fals:[49,45,42,29,3,50,5,31,11,22,9,39,40,26],bigoplu:49,eqalign:49,own:[49,14,37,42,20,16,1,31,4,43,6,52,53,10,7,24,54,26],amsmath:[49,14,1,43,20,25,7],circledr:49,maxbuff:25,bigtriangledown:49,guard:22,vphantom:49,circlearrowleft:49,transfer:[20,37],much:[31,47,19,52,53,7],bigcap:49,arg1:46,"var":[12,28,1,3,51,19,46,40],stai:[53,7],arg2:46,deliveri:[20,42],propto:49,unexpect:[11,22],precnapprox:49,studentansw:51,bodi:[0,14,51,20,10,7,24],gain:[53,50],lgroup:49,bug:[12,14,37,42,4,18,20,22,54,7],count:3,made:[37,1,4,52,54,48,26],bbbk:49,whether:[49,27,45,46,3,31,51,5,32,33,11,22,7,9,39,55,50],wish:[14,46,56,3,4,49,20,7,53,39],displai:[49,6,12,13,42,18,19,20,25,22,23,24,27,15,31,33,35,36,7,5,44,37,47,48,50,51,53,54],substack:49,underleftrightarrow:49,mathord:49,gtrapprox:49,below:[2,49,6,9,12,39,20,25,22,48,27,32,33,36,10,7,5,45,31,21,50,52,11,54,24,55],sideset:49,"_htmlormml":53,problem:[14,37,42,15,46,3,4,49,20,44,53,54,7],x03c0:54,"int":49,dure:[42,28,19,41,22,39,48],novemb:14,implement:[12,0,14,16,49,43,46,44,19,53,54,40,41],nolimit:49,inf:49,probabl:[19,46,7,15,2],oplu:49,mrow:[20,54],definecolor:49,immateri:1,percent:[11,45],detail:[0,5,6,7,8,13,14,28,43,17,19,20,11,22,27,15,29,32,33,35,36,37,38,39,42,49,44,45,1,50,51,52,53,54],lesseqgtr:49,other:[0,2,30,5,6,7,14,15,43,17,18,19,20,41,22,23,48,28,29,46,33,35,37,39,40,42,49,44,45,47,1,11,51,52,53,54,55],futur:[0,4,18,19,52,53,48],branch:[7,37],varieti:54,removeaft:6,repeat:[37,2],star:49,"class":[40,49,34,42,28,29,16,17,5,33,41,22,48,10,24,54,35],thicksim:49,msgroup:44,reflow:[53,42],sphinx:2,scientif:47,reliabl:[53,14,3,7],rule:[49,6,9,1,22],mathjax_mathml:3,portion:51,eot:37},objtypes:{"0":"py:method"},titles:["The MathJax.Ajax Object","Using Queues","Using MathJax in popular web platforms","Loading MathJax Dynamically","The MathJax Community","The tex2jax Preprocessor","The FontWarnings extension","Loading and Configuring MathJax","Installing MathJax in WordPress","The MathML input processor","The MathJax.InputJax Class","The NativeMML output processor","The MathJax.HTML Object","MathJax Documentation","Migrating from MathJax v1.0 to v1.1","MathJax AsciiMath Support","The MathJax API","The MathJax.Callback.Queue Class","The MathJax.Message Object","Using Signals","Getting Started","Describing HTML snippets","The Core Configuration Options","What is MathJax?","The MathJax.OutputJax Class","The TeX input processor","Configuration Objects","The jsMath2jax Preprocessor","The MathJax.Callback Class","The MathJax.Callback.Signal Class","The MathJax Startup Sequence","The AsciiMath input processor","The mml2jax Preprocessor","The asciimath2jax Preprocessor","The MathJax variable","Converting to MathJax from jsMath","The MathZoom extension","Installing and Testing MathJax","Using MathJax in Movable Type","The MathJax.Hub Object","The MathJax Object-Oriented Programming Model","The Base Jax Class","What&#8217;s New in MathJax v1.1","Common Configurations","MathJax MathML Support","The HTML-CSS output processor","Using Callbacks","Glossary","The MathJax.ElementJax Class","MathJax TeX and LaTeX Support","The MathMenu extension","Modifying Math on the Page","Synchronizing your code with MathJax","MathJax Output Formats","The MathJax Processing Model","The MMLorHTML configuration options","CSS Style Objects"],objnames:{"0":"Python method"},filenames:["api/ajax","queues","platforms/index","dynamic","community","options/tex2jax","options/FontWarnings","configuration","platforms/wordpress","options/MathML","api/inputjax","options/NativeMML","api/html","index","upgrade","asciimath","api/index","api/queue","api/message","signals","start","HTML-snippets","options/hub","mathjax","api/outputjax","options/TeX","options/index","options/jsMath2jax","api/callback","api/signal","startup","options/AsciiMath","options/mml2jax","options/asciimath2jax","api/variable","jsMath","options/MathZoom","installation","platforms/movable-type","api/hub","api/object","api/jax","whats-new","config-files","mathml","options/HTML-CSS","callbacks","glossary","api/elementjax","tex","options/MathMenu","typeset","synchronize","output","model","options/MMLorHTML","CSS-styles"]}) -\ No newline at end of file +Search.setIndex({objects:{"":{Load:[0,0,1],Preloading:[0,0,1],Log:[18,0,1],ExecuteHooks:[28,0,1],setScript:[12,0,1],Subclass:[40,0,1],Delay:[28,0,1],Add:[28,0,1],getAllJax:[39,0,1],getScript:[12,0,1],Interest:[29,0,1],preProcess:[24,0,1],loadComplete:[0,0,1],Translate:[41,0,1],Config:[39,0,1],addElement:[12,0,1],Reprocess:[39,0,1],Styles:[0,0,1],ExecuteHook:[29,0,1],loadTimeout:[0,0,1],Resume:[17,0,1],Update:[39,0,1],preTranslate:[24,0,1],setRenderer:[39,0,1],formatError:[39,0,1],call:[17,0,1],postTranslate:[24,0,1],getJaxByInputType:[39,0,1],PreProcess:[39,0,1],Post:[29,0,1],has:[40,0,1],Signal:[28,0,1],Set:[18,0,1],Insert:[39,0,1],Execute:[28,0,1],addText:[12,0,1],TextNode:[12,0,1],Augment:[40,0,1],needsUpdate:[48,0,1],Clear:[18,0,1],Register:[41,0,1],Zoom:[24,0,1],Remove:[18,0,1],Element:[12,0,1],Queue:[28,0,1],NoInterest:[29,0,1],Rerender:[39,0,1],getJaxByType:[39,0,1],Push:[17,0,1],Typeset:[39,0,1],fileURL:[0,0,1],wait:[17,0,1],reset:[28,0,1],loadError:[0,0,1],getJaxFor:[39,0,1],getJaxFromMath:[24,0,1],LoadHook:[0,0,1],Process:[39,0,1],Hooks:[28,0,1],MessageHook:[29,0,1],Startup:[41,0,1],Init:[40,0,1],Suspend:[17,0,1],SourceElement:[48,0,1],can:[40,0,1],File:[18,0,1],Text:[48,0,1],isJax:[39,0,1],filterText:[18,0,1],isa:[40,0,1],Require:[0,0,1]}},terms:{represent:[54,48,51],lspace:49,reprocess:[39,48,51],mathjax_msie_fram:18,yellow:49,four:[49,1,14],prefix:[12,20,24,42],asymp:49,blacktriangledown:49,webfont:[6,45,20],whose:[12,7,51,5,46,33,39,24],html5:[14,42,20,44,53,54,7],under:[44,37],preprocess:[30,51,41,54,39,24],asciimath2jax:[15,43,20,33,54,26],worth:7,digit:42,gimel:49,everi:[19,39,42,7],risk:20,mskip:49,arcco:49,govern:[20,14,7],dotplu:49,affect:[14,37,42,49,39,26],eqnarrai:49,cmd:22,bigodot:49,c6h5:49,ominu:49,vector:[47,53,54],math:[30,5,7,12,13,14,42,43,18,19,20,11,22,23,24,27,15,3,32,33,35,36,37,10,39,49,44,45,47,50,51,52,53,54],nparallel:49,showcontext:50,nsubseteqq:49,direct:[6,14,45,37],consequ:11,second:[0,14,37,28,46,56,52,5,6,33,21,22,7,19,10,44,24,1],ngeq:49,even:[0,3,49,39,28,17,19,20,21,23,15,29,46,7,43,44,45,1,51,52,53,54],hide:51,prejax:[54,22],neg:49,menclos:49,"new":[30,4,49,12,13,14,42,18,19,20,25,23,24,26,28,39,10,7,40,29,37,48,1,50,51,52,53,54],net:20,mhtml:2,told:[49,52,3],limsup:49,elimin:22,behavior:[14,37,22,7],lessapprox:49,never:[0,7,37,41],here:[12,49,34,28,46,48,1,3,51,19,20,41,22,39,29],updiagonalstrik:49,met:30,lneqq:49,path:[43,0,7,20],noundefin:[43,20,49],interpret:[49,20,37,15],nrightarrow:49,forum:[20,4],mbox:49,rceil:49,linearli:53,circleddash:49,mathstrut:49,unix:37,brower:[49,15],thinmathspac:44,unit:[49,42],highli:23,describ:[12,49,14,37,28,20,47,56,30,51,43,6,21,7,46,54,39,24],would:[5,6,7,9,11,12,14,15,43,17,20,25,22,48,27,28,31,32,33,35,36,37,39,40,49,45,46,21,56,50,51,53,54,55,1],afterward:46,readi:[19,34,30,43,41,10],ltime:49,varlambda:49,call:[0,2,3,49,6,7,9,14,17,18,19,20,25,22,24,26,27,28,29,31,32,33,36,37,10,39,40,41,5,45,46,47,48,1,50,51,52,11,54,55],recommend:[20,54,37,53],vcenter:49,preview:[27,5,32,33,22,54],type:[0,2,3,5,8,10,12,14,43,19,20,41,22,48,39,35,38,7,49,44,24,1,51,52,53,54],until:[0,27,46,1,5,32,33,41,22,7,19,39,29],notin:49,displaymath:[5,7],relat:[0,42,53],notic:[49,15],warn:[0,14,22,6],mathev:24,jpg:[5,32,33,21,27],loss:7,hold:[0,21,22,36,54,39],unpack:[20,37],must:[0,30,49,6,14,17,18,20,25,22,15,29,39,33,36,37,7,5,44,45,47,56,52,53],fbox:[49,42],join:[19,49],centerdot:49,setup:[23,20,44],work:[12,13,14,37,42,15,46,49,3,4,51,43,20,44,35,52,19,23,53,40],cc0000:[56,22],tag_nam:37,root:[0,42,30,18,49,7],overrid:[40,6,10,41,24],mathmenu:[34,45,56,50,43,11,26],give:[49,7,45,20,47,21,56,19,6,25,39,29,26],cirit:7,indic:[0,7,37,15,46,17,49,30,19,20,29,41,22,48,10,39,24,54],impair:23,hline:49,want:[4,5,14,28,43,16,18,19,20,22,24,15,46,33,37,38,7,40,49,44,45,1,51,53,55],keep:[14,37,2,15,47,51,49,20,54,7,24],setminu:49,end:[0,5,44,15,2,53,49,30,4,43,1,8,19,38,7,54,42],quot:[5,33,45,22,42],hom:49,heartsuit:49,how:[0,2,3,4,5,6,7,8,14,15,43,17,18,20,21,22,27,28,29,32,33,35,36,37,39,49,45,31,50,51,52,11,54],disappear:[5,32,33,27],answer:[4,51],verifi:[20,37,4],config:[2,30,5,6,7,8,9,10,11,14,43,18,19,20,25,22,24,26,27,15,3,31,32,33,35,36,38,39,41,49,45,46,56,50,51,53,55,1],renewcommand:49,updat:[39,37,42,2,1,51,14,22,7,48],showrender:50,recogn:20,lai:[53,54],diagdown:49,after:[0,3,49,39,17,18,19,20,41,22,26,28,46,37,7,29,45,1,50,51,52,54],befor:[0,2,3,4,49,7,8,14,15,17,18,19,20,21,22,25,28,29,30,46,33,36,39,40,41,5,44,45,47,1,51,52,53,54],wrong:44,startuphook:[19,39],parallel:[49,1,30,42],averag:54,alignedat:49,attempt:[0,44,50],third:[1,44],leftarrow:49,receiv:[29,14,37,46,40,19,20,41,52,7,24],greasekit:3,maintain:[14,52,4,19,46,22,24],environ:[5,20,49,25,4],enter:[44,31,51,49,20,54,7],textnod:12,order:[30,49,6,5,14,17,18,20,22,27,28,39,32,33,37,7,40,29,45,46,47,1,53,54],oper:[0,5,6,9,11,42,17,18,19,25,23,24,27,31,32,33,36,45,10,29,34,37,46,47,1,50,51,53,55],approxeq:49,over:[12,0,45,42,49,50,51,43,20,22,36,53,54,7],fall:[37,15,20,1,49,6],becaus:[19,14,45,1,15,46,49,3,18,5,20,33,21,7,54,44,29,25,51],boxtim:49,suspend:[19,17,1,29],textrm:49,appar:1,afil:46,flexibl:[21,1,14],vari:53,smallint:49,img:[27,56,3,5,32,33,21],fix:[53,14,37,42,7],strang:44,better:[42,15,31,50,20,35,8,53,7],boxminu:49,drawback:53,fade:6,persist:4,comprehens:47,hidden:49,easier:[29,14,37,1,49,44,40],moveleft:49,them:[0,5,6,12,14,28,43,17,19,20,25,15,29,39,31,33,7,42,49,44,37,46,56,54,1],thei:[0,1,3,4,5,6,7,9,11,14,42,16,17,18,19,20,25,22,26,27,28,29,30,31,32,33,36,37,39,41,43,45,46,47,21,49,50,51,52,53,54,55,56],qualiti:[23,53,54],safe:[12,20,51],rectangl:47,"break":[49,52,1,42],emph:49,mtext:[49,20,42],wedg:49,widetild:49,choic:[53,39,8],dbinom:49,leftharpoondown:49,timeout:[0,42,28],each:[5,7,37,15,28,29,49,30,52,18,43,20,33,51,19,54,39,1],debug:18,side:[18,49,20,25,22,8],mean:[2,30,5,6,14,43,16,19,22,23,27,15,29,3,32,33,7,49,46,51,52,53],leqq:49,createel:3,resum:[17,1],represetn:49,leqalignno:49,mathopen:49,looparrowleft:49,network:[14,37,42,43,20,38,7],goe:[49,52,1],newli:[12,19,40],crucial:37,predefin:22,content:[2,30,5,8,10,12,14,42,43,20,21,22,39,33,38,7,40,49,44,47,1,51,53,54],method:[12,0,14,40,28,29,17,1,52,18,19,46,41,7,48,10,39,24,51],reader:[43,23,49,42,53],forth:34,impract:37,multilin:49,situat:[20,7,42,51],free:[48,4],ineffici:[40,22],reconfigur:14,lneq:49,angl:49,moment:[20,10,37],filter:28,isn:[19,41,48,51],iphon:42,isa:40,subtl:51,onto:[47,20,1,39,51],attribtu:20,mathbb:49,rang:[20,54],mathbf:49,render:[5,44,42,30,50,43,20,22,23,53,54,39,55,35],independ:7,yourcolleg:37,restrict:[49,37,22],hook:[19,0,28,29],unlik:[23,49,7,41],alreadi:[0,28,51,30,49,3,4,18,19,46,52,7,40,1],subtleti:49,primari:[53,14],tooltop:45,top:[34,37,49,20,53,7,24],sometim:[20,7,37],underlin:[49,42],master:52,too:[49,45,42,15,3,5,20,33,53],similarli:[0,39,37],newenviron:49,john:46,listen:[19,29,39,28],thickapprox:49,namespac:[42,28,3,51,49,20],tool:[1,37],tagind:25,embellish:42,compressor:42,somewhat:52,technic:47,past:[29,14,42,19,52,23,53],filesmatch:37,provid:[12,0,44,2,28,46,17,49,3,18,19,20,29,21,51,52,23,54,39,40,1],eqalignno:49,x2212:[20,54],tree:[20,21],"final":[14,46,49,20,21,23,54,24],project:[47,7,4],matter:[19,35],mathtt:49,ldotp:49,modern:[23,6,44,13],mind:[49,20,7,15,2],increment:17,seem:[46,44],rightrightarrow:49,ldot:49,person:46,latter:[49,16,19,31,21,54,7,26],domcontentload:[30,3],expens:[53,54],simplifi:42,though:[28,15,49,52,21,22,54],object:[0,30,49,6,12,13,16,17,18,19,21,22,24,26,28,46,36,10,39,40,41,29,34,45,47,48,56,50,51,52,11,54,1],gzip:42,regular:[5,20,33,22],letter:[20,37],grave:49,don:[49,14,42,46,1,3,31,51,19,6,44,7,53,54,39],dom:[12,48,1,51,19,52,41,22,10,39,24],doe:[49,44,37,15,28,55,48,3,51,19,20,11,22,7,23,53,10,39,24,54],declar:[44,45,56,50,49,6,11,36],place:[0,45,6,40,49,4,51,19,20,29,25,22,37,7,24,1,35],tfrac:49,unchang:[49,14,55,51],sum:[49,28],came:37,delaystartupuntil:[39,30,22,7],random:[20,37],lnapprox:49,syntax:[49,47,40,42,15],mediawiki:2,isopera:39,outerhtml:42,shownam:46,asynchon:51,next:[15,52,51,49,31,39,48],involv:[49,52,54,7,4],consolid:23,just:[19,44,37,2,28,46,49,43,20,1,22,7,8,23,54,39,29,56],mathchoic:49,ismsi:[39,30],menu:[13,44,45,42,48,30,50,43,34,22,36,8,37,53,38,24,54,11],explain:[14,2,43,52,7,26],configur:[0,3,5,6,7,8,9,10,13,14,42,18,19,20,25,22,23,24,26,27,15,30,31,32,33,35,36,37,38,39,41,43,44,45,46,21,49,11,53,54,55],apach:37,theme:[7,2,8],rich:[23,47],folder:[20,45,37],stop:[49,39,45],infti:[49,54],amazon:20,report:[44,22,4],circeq:49,subseteq:49,fadeouttim:6,bar:[49,40,28],patch:[7,37],reload:50,bad:42,replacechild:3,neq:49,unexpectedli:[49,20,15],undefinedfamili:45,dashrightarrow:49,scriptscriptstyl:49,precneqq:49,result:[14,45,28,15,46,47,48,1,51,49,20,44,7,53,10,39,24,54],respons:[49,29,10,42,28],fail:[0,42,46,41,53,26],themselv:[34,30,43,20,21,39],best:[0,14,37,15,1,53,54,7],awar:[49,0,1,44,15],subarrai:49,varinjlim:49,wikipedia:[47,3],circledcirc:49,gneqq:49,awai:[49,7,37],approach:[46,54,2,51],attribut:[12,44,42,20,56,49,32,21,54,7],blacktriangleright:49,extend:[23,54,15],extens:[0,30,5,6,14,42,43,19,20,25,22,26,27,39,32,33,35,36,7,41,49,34,47,56,50,51,1],add:[40,5,14,2,28,17,49,43,6,33,41,22,48,53,24,56],preprocessor:[5,14,15,20,49,44,30,34,43,32,33,27,22,7,54,39,51,26,35],toler:3,intop:49,protect:49,expos:15,cow:40,howev:[49,14,37,46,30,56,3,4,18,43,20,22,51,53,54,7,40,1,26],configuraiton:[49,54],against:29,seri:[1,21],com:[7,37],varpsi:49,pre:[5,14,37,28,49,43,6,33,19,7],foral:49,can:[0,3,4,5,6,7,12,14,28,43,17,18,19,20,25,22,23,24,26,15,29,30,46,33,34,35,37,10,39,40,41,42,49,44,45,47,56,11,51,52,53,54,1],foobar:40,delic:11,innerhtml:[3,51],height:[49,24,42,50],wider:4,summat:31,sqsupset:49,speak:[16,54],issol:49,chrome:[45,53,39,3,42],three:[44,37,28,46,1,49,6,21,41,52,53,54,20],been:[0,3,4,5,14,17,18,19,20,24,28,30,46,33,35,10,7,29,37,1,51,52,53],trigger:[43,24,22,36],interest:[19,29,47,4,52],basic:13,tini:49,quickli:[23,7,4],underrightarrow:49,regul:1,xxx:49,ani:[0,3,4,5,6,7,9,11,14,43,17,18,19,20,25,22,24,27,28,29,30,31,32,33,36,37,10,39,40,49,44,45,46,48,1,50,51,52,53,55],emploi:53,dash:[56,45],tanh:49,hat:49,servic:[14,37,42,20,38,7],properti:[12,0,34,40,28,29,17,46,41,48,10,39,24],diamondsuit:49,sourceforg:14,weren:14,dashboard:38,"3px":[49,56],succeq:49,have:[0,2,30,4,5,6,7,14,15,43,19,20,11,22,24,26,28,29,3,46,33,37,39,40,42,49,44,45,31,48,1,51,52,53,54],nexist:49,retransl:[48,51],tabl:[53,44,15],cong:49,sever:[0,5,14,37,49,51,43,46,33,54,24,1],amout:18,disabl:[11,14,45],incorrectli:[20,14,42],perform:[30,4,6,14,42,17,18,19,41,22,48,28,46,39,10,7,29,34,47,24,1,51,52,53],suggest:[6,4,20],make:[0,4,5,6,14,42,43,16,17,19,20,22,23,24,27,39,32,33,37,7,40,49,44,45,56,50,51,52,53,54,1],complex:[53,21],split:49,synch:14,lrcorner:49,unsafewindow:3,complet:[0,30,5,14,43,17,19,20,41,22,24,28,29,39,46,33,7,49,37,47,48,1,51,52,53],longmapsto:49,hand:[44,34,3,18,25,22,54,35],fairli:[21,14],rais:[49,42],mkern:49,ignorepast:29,unlhd:49,squar:[49,21,42],redefin:[6,10,41,24],kept:19,thu:[14,28,1,19,46,48],min:49,inherit:[16,40,10,24,48],client:45,thi:[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56],idotsint:49,programm:40,everyth:[43,49,1,39,7],settimeout:[46,28],left:[44,37,34,30,18,49,52,25,22,8,38,26],processclass:[5,33],identifi:[12,29,15,49,20,54],proccess:[10,24],yen:49,mathbin:49,human:20,coprod:49,yet:[44,17,1,51,19,52],languag:[49,20,54,47,52],noscript:[5,33],onload:[34,3,30,46,22,7],errorset:[43,22],easi:[47,35],interfer:[20,31],had:[19,20,14,3,7],myconfig:[19,46],step1:49,els:[49,46,3,51],save:[53,38,7,56,8],"0x21c0":49,take:[12,0,14,28,2,46,1,30,4,51,49,6,25,52,53,7],sanit:18,applic:[23,20,30,2],loadtimeout:0,preserv:46,bbox:49,background:[49,56,42],sqsubset:49,specif:[0,7,2,28,29,47,17,1,34,5,46,33,41,22,51,53,54,39,48],arbitrari:49,manual:6,zoom:[13,44,42,30,43,22,36,24],leftrightarrow:49,underli:53,www:[20,3,37,50],right:[11,44,45,47,17,1,3,18,49,31,25,22,8,37,54,7,26],old:19,famili:[49,0,45],deal:20,autobold:49,interv:31,begin:[19,37,15,49,30,51,5,25,53,54,7,1],percentag:[11,45,22],intern:[0,44,15,28,29,47,17,1,51,49,22,48,53,10,39,24,54],successfulli:[0,46],interc:49,dddot:49,bottom:[7,8],subclass:[29,34,24,41,48,10,40],circ:49,tracker:[20,4],overcom:52,condit:[0,30],foo:[40,28],core:[1,30,49,22,54,39,26],plu:[43,29,30],bold:[49,47,21,25,26],insecur:20,popular:[20,35,2],colleg:37,repositori:[14,37,42],post:[29,45,28,30,4,18,19,52,41],"super":[40,42],llless:49,obj:12,nwarrow:49,slightli:[49,53,8],surround:[20,11,45],unfortun:[20,37],current_theme_templ:2,joomla:2,span:[49,27,5,32,33,21,22,54,24,35],downharpoonright:49,geramond:49,regist:[0,7,29,47,30,19,52,41,10,39,24,54],jipsen:15,encod:[49,15],bound:49,two:[19,1,15,52,49,43,20,21,22,56,7,25,26],down:[37,38,24,22],shortparallel:49,wrap:40,ntriangleright:49,stackrel:49,nsupseteq:49,git:[20,14,37,42],suffici:[15,49,20,25,7,55],support:[13,14,45,42,15,20,30,49,3,4,34,43,6,44,23,53,54,7,55,11],transform:54,ngtr:49,avail:[0,2,3,5,6,14,43,19,20,11,22,23,48,27,32,33,37,7,40,49,44,45,47,1,50,51,53,54],width:[44,50,49,20,25,53,24],reli:[0,14,47,1,3,51,46,11,53],wordpress:[2,8],editor:8,rightthreetim:49,lnsim:49,longdiv:49,form:[44,45,47,18,49,20,25,22,54,7,48],offer:[14,42,4],forc:[45,53,7,24],epsilon:49,hear:[19,29],so4:49,downdownarrow:49,"true":[5,14,45,28,29,48,49,30,50,43,31,34,22,7,11,9,39,40,10],maxmacro:25,reset:[50,28],displayalign:22,donald:47,tell:[20,7,37,51,53],moveright:49,more:[49,6,8,10,14,42,17,20,21,22,23,28,29,46,39,35,37,38,7,40,41,43,45,47,56,11,51,52,53,54,55,1],retir:14,featur:[13,44,37,49,4,51,19,46,36,53,40],rfloor:49,exist:[45,28,49,20,37,40],ddot:49,backsim:49,triangleq:49,check:[0,14,37,46,18,49,20,29,10,40],tip:49,abovewithdelim:49,role:54,test:[12,13,14,37,52,30,3,51,19,20,44,7,53,39,40],tie:[30,24,28],smallsmil:49,scriptstyl:49,searrow:49,mathel:2,intend:[47,40,22],munderov:54,gvertneqq:49,consid:[0,14,42,49,4,5,20,54,39,48,1],omega:49,outdat:4,longer:[29,14,37,3,18,43,53],furthermor:[1,14,22,7],anywher:7,cancelto:49,tex2jax_ignor:[5,42],ignor:[5,49,33,29],time:[0,3,4,49,6,12,39,42,18,19,25,22,28,46,36,7,41,29,37,1,51,53,54],push:[28,47,17,1,30,51,46,39],"5kb":25,mathrm:49,doteq:49,skip:[5,33,37],consum:18,known:1,skin:2,displayind:22,millisecond:[0,45,28,50,18,6,36,39],decid:[7,50],middl:[49,20],depend:[28,30,51,46,8,53,7,55],head:[2,3,51,20,8,53,38,7],decim:[49,31],readabl:47,nearrow:49,varpi:49,certainli:37,vee:49,decis:53,text:[2,30,5,6,8,10,12,14,42,43,18,19,20,21,22,23,48,25,27,15,3,32,33,35,38,7,49,45,46,47,56,11,51,53,54,1],succnsim:49,sourc:[13,14,45,37,49,3,50,43,44,19,23,53,54,39,48,1,11],string:[0,28,29,49,18,5,56,33,21,22,19,39,48,25],word:[5,33,7,54],room:25,dim:49,getjaxfor:[19,39,24],administr:[2,8],level:[20,7,37,34],did:46,item:[11,45,50,49,46,21,24],cooki:[12,30,42],div:[12,49,54,35,51],prevent:[49,27,45,42,20,50,5,32,33,25,22,7],mmlorhtml:[43,53,55,22,26],slower:53,htmlcss:24,compens:11,sign:[49,14,15,5,20,33,54,7],cost:[49,20,7,40,15],pmb:49,rightarrowtail:49,histori:[19,29,30,47],xandi:40,dotsi:49,dotsm:49,appear:[19,34,37,15,46,49,31,18,5,20,33,22,51,8,7,48,50],dotso:49,repli:19,dotsc:49,dotsb:49,current:[0,7,45,37,2,29,40,20,8,53,38,39,24,10,48],backepsilon:49,ampersand:[49,15],inlinemath:[49,14,3,51,5,20,33,7],defici:44,amalg:49,mathsiz:49,gener:[49,7,15,20,55,48,30,43,6,35,46,54,39,24],mfrac:[20,54],explicitli:[49,14,42,15,46,5,20,33,22,7,40],modif:[1,7],address:[20,37,51],along:[49,47,1,18,19,35,10,24],wait:[0,7,37,42,28,29,47,17,1,3,51,19,46,30,22,52,10,39,24],box:[0,42,30,49,6,24],html_head:2,shift:22,xtwoheadrightarrow:49,bot:49,queue:[29,34,28,52,16,17,1,30,51,46,47,39],overriden:39,digamma:49,varlimsup:49,commonli:[43,20,47],macintosh:39,semant:40,succsim:49,extra:[49,42,3,19,22,54],circumv:37,modul:[0,38,34],prefer:[14,45,50,20,53,37,55],iepro7:3,veebar:49,visibl:[49,27,1,51,5,32,33,44,24],marker:[49,15],myid:56,mobil:[14,42,7,23,53,39],arrowvert:49,memori:[52,48],bigr:49,visit:20,todai:47,subvers:[20,37],stylesheet:[0,34,28,29,17,30,51,52,22,8,53],handler:[0,34,47,3,30,51,52,22,54,7,24],xtofrom:49,current_skin:2,bigl:49,bigm:49,eqcirc:49,checkout:37,bigg:49,inputjax:[34,16,48,30,41,10,39,40],capit:16,reduct:53,peopl:20,bigtriangleup:49,enhanc:[54,42],minscaleadjust:45,visual:[43,23],accept:[46,28,51],hphantom:49,easiest:[19,20,37,28,46],graphic:[47,53,37],prepar:[1,7,24],cap:49,uniqu:56,pmatrix:49,whatev:[49,2,15,24,1,51,19,40],cal:49,purpos:[46,54],getjaxbytyp:39,downharpoonleft:49,meant:28,subseteqq:49,varprojlim:49,backslash:[49,25,22],topic:[16,13,7],critic:37,sharp:49,chemic:49,occur:[0,44,37,28,46,17,1,3,50,18,19,20,30,41,22,7,52,39,24,29,51],eqsim:49,pink:49,alwai:[28,16,1,49,46,7],multipl:[49,1,14],trianglelefteq:49,write:[29,15,47,1,51,20,23],fourth:1,mathsf:49,tild:49,xhtml:[20,44],map:[54,24],book:47,max:49,clone:37,spot:[49,15],usabl:37,mac:[11,39,45,22],cours:[1,14,44,7],mai:[0,2,3,4,49,6,8,14,16,19,20,11,22,24,15,29,46,39,37,7,40,5,44,45,48,1,51,52,53,54],underscor:[49,20],data:[12,0,34,45,28,46,40,19,20,41,48,37,10,39,24],grow:[53,2],newlin:[49,42,18],vartheta:49,baso4:49,explicit:[0,7,22,20],uparrow:49,produc:[49,6,14,19,20,25,22,23,48,26,28,46,35,53,10,7,29,45,24,50,51,11,54],programmat:[54,35],"switch":[14,37,42,49,35,54],preced:[46,7,22],combin:[0,14,42,31,49,43,20,53,54,7],block:[11,14,45,42,20,3,30,49,6,41,22,54,7],approx:49,comfort:37,lsh:49,tex2math:35,still:[19,44,2,28,29,47,1,43,22,36,53,7],pointer:40,ttf:37,dynam:[0,34,13,1,3,51,20,22,52,23,54,7],entiti:[49,44,42,15],amssymbol:[43,20,49,14,7],conjunct:14,group:[0,44,4],monitor:4,polici:37,mpcontext:43,lucki:49,platform:[23,13,2,20],window:[34,28,6,3,50,18,46,51,53,39],"05em":49,bookmarklet:7,main:[49,14,37,1,16,40,56,50,34,43,20,41,22,7,53,10,39,24,54],mathexampl:51,non:[12,0,15,17,49,20,53,54],within:[0,30,49,6,14,28,16,20,25,24,15,39,46,33,35,7,40,42,5,44,37,51,52,54],myinputjax:41,initi:[0,14,15,52,49,30,50,34,5,20,33,41,22,7,19,54,39,48,1],safari:[53,39,3,42],half:46,now:[14,37,42,47,30,43,20,53],discuss:[12,37,7,3,4],nor:[6,21],term:[20,14,7,18],name:[0,30,5,6,7,12,14,28,43,18,19,20,21,22,24,25,26,15,29,3,46,33,37,10,39,40,41,42,49,44,45,48,56],opera:[53,55,39,3,42],boxdot:49,drop:37,separ:[19,14,37,1,49,18,5,20,33,44,22,11,7,56,26],messagestyl:[6,22,18],confid:23,varsupsetneqq:49,compil:46,domain:[20,7,37],replac:[0,14,37,42,28,40,44,3,51,49,20,25,7,10,39,24,54],individu:[48,42,26,51],strikethrough:49,continu:[0,14,15,49,19,52,7,1],happen:[44,37,15,17,1,3,49,52,54],baselin:24,shown:[49,21,22,50,51],accomplish:[20,7,37,53],"3rd":20,space:[42,15,31,51,49,20,22,53,9,48,54],intermix:30,internet:[0,42,3,50,18,49,46,22,53,54,51,24,26],formula:[51,22,36,23,53,54],correct:[46,14,3],simeq:49,earlier:[20,1,7,30,53],state:[10,24,1],migrat:[13,14],ajax:[0,7,16,1,30,34,49,46,41,19,39],mime:[44,48,20,41,10,39,24],underleftarrow:49,org:[14,42,2,3,50,51,49,20,35,8,53,38,7],ord:49,care:[15,31,3,49,20,26],ntrianglelefteq:49,couldn:46,x00b1:20,synchron:[0,28,13,47,17,1,3,51,19,46,30,52,39,29],mscarri:44,thing:[15,47,51,49,20,21],eqref:49,mathop:49,unwis:53,think:[49,22,15,51],frequent:[5,19,33,15],first:[3,49,8,28,19,20,21,22,24,15,29,46,33,37,10,7,5,44,45,1,51,52,54],origin:[40,49,37,15,29,17,3,51,19,20,48,10,7,24],lfloor:49,oni:37,directli:[37,42,1,3,51,49,46,41,8,54],onc:[0,37,28,29,49,30,51,43,20,35,53,10,24,1],arrai:[30,49,6,9,7,42,17,19,21,22,24,25,26,27,28,29,31,32,33,35,10,39,41,5,45,46,11,53,54,55],yourself:[37,20,17,49,46,22,7],fast:[14,42,7],open:[13,44,37,50,49,20,8,23,38],ios4:42,size:[11,45,42,56,51,49,25,53,7,24],given:[0,2,49,12,15,17,18,19,20,21,22,48,28,46,10,39,40,42,29,24,56,54,1],convent:24,ifmodul:37,referenec:39,leftrightharpoon:49,circl:49,white:56,conveni:[20,40,22],hub:[0,30,5,6,7,9,11,14,43,16,18,19,20,25,22,24,26,27,15,3,31,32,33,35,36,10,39,49,34,45,46,48,1,50,51,53,54,55],especi:54,copi:[14,37,15,3,4,43,20,44,7,23,39,41],specifi:[30,49,6,7,9,11,12,14,28,17,19,20,21,22,25,15,29,46,33,36,10,39,42,5,45,47,56,50,52,53,54,55,1],github:[14,37],enclos:[49,54,56,45,22],quad:49,than:[0,3,5,6,7,8,9,14,28,43,17,19,20,41,22,23,48,26,15,29,30,31,33,37,10,39,40,42,49,44,45,47,56,51,52,53,54,1],serv:[20,42],wide:[23,54,37],instanc:[12,7,48,1,5,33,41,39,40],underbrac:49,were:[14,48,51,19,53,24],posit:[49,17,45,42],stub:41,browser:[30,5,6,12,13,14,42,43,20,11,22,23,48,26,15,39,3,33,34,35,37,7,49,44,45,47,50,52,53,54,55],preccurlyeq:49,sai:[17,3,28],lnot:49,doublecup:49,nleftrightarrow:49,argument:[29,28,1,49,46,40,26],hskip:49,doctyp:[20,44],engin:[23,13],techniqu:[14,3],npreceq:49,consortium:23,note:[0,3,49,6,8,39,20,21,22,48,25,15,29,46,33,37,7,41,5,45,56,50,51,53,54,55,1],x2260:20,jsmath:[13,54,35],noth:[20,28,46],channel:[19,47],updownarrow:49,surd:[49,42],sure:[49,14,37,42,29,1,4,51,5,20,33,53,7],windowset:50,normal:[5,28,49,3,43,20,33,22,54,56],buffer:25,compress:7,beta:[49,7],pair:[12,0,28,49,5,56,33,21,19,10,39,24,25,26],fileurl:0,beth:49,hotfix:7,latex:[13,15,47,49,5,20,22,23,54,7],renam:14,textarea:[5,33],later:[29,44,45,28,15,17,1,49,46,7,39],drive:37,typeset:[0,30,5,42,18,19,11,22,23,48,27,46,33,36,39,34,45,32,47,1,50,51,52,53,54],badg:4,sigma:49,mathfrak:49,showmathmenu:45,ismobil:39,show:[49,37,20,4,51,43,6,21,22,46,38,50,26],autoreset:28,parentnod:[3,42],unprocess:[39,48,51],concurr:30,permiss:[20,37,15],hack:53,isfirefox:39,corner:[34,22,18],xml:[23,47],onli:[0,2,3,4,5,6,14,42,43,20,21,22,23,48,15,29,39,46,33,37,10,7,49,45,47,56,51,53,54],slow:24,activ:[14,37,28,47,4,51,43,52,44,54],behind:49,inlinedelimit:49,otim:49,black:49,offici:7,geq:49,mypic:[5,32,33,21,27],nearli:[43,49,7,26],variou:[0,7,45,2,29,16,56,18,19,6,11,10,39,54,26],get:[30,49,12,13,28,18,20,11,22,24,15,3,46,37,7,40,42,29,44,45,1,51,53],cannot:[49,15],ncong:49,downarrow:49,nsim:49,requir:[0,5,14,1,28,46,49,3,43,20,33,41,7,19,23,10,39,24,54],truli:51,prime:49,blind:54,lceil:49,mathpunct:49,rerend:[10,39,48,51],consist:[44,15,1,49,21,53],hostil:20,intermitt:[34,18],shortmid:49,apricot:49,through:[49,14,37,42,29,1,50,19,52,44,53,54,7,40,26],where:[0,30,4,49,6,12,14,28,18,19,20,25,24,15,46,39,37,10,7,43,34,45,48,56,51,52,54],wiki:[2,47,3,49,20,54,7],latexmathml:15,often:[49,20,56,54,15],keyboard:47,maximum:24,ismac:[39,30],concern:[54,39,15],infinit:25,detect:[3,42,28],parent:[12,40],enumer:49,label:[53,50,26],enough:[44,1,20,21,53,7],between:[49,7,28,15,46,1,50,19,20,53,54,39,48,42],maltes:49,"import":[0,37,42,1,43,52,19,7],across:[47,53],absenc:2,longleftrightarrow:49,vdot:49,screen:[0,42,1,18,43,23,51,24],negmedspac:49,come:[14,37,1,3,43,46,44,53,54,7],leftleftarrow:49,fit:[19,50],timout:0,pertain:20,audienc:[53,44],inconsist:14,overbrac:49,improv:[14,42,4,22,53,7],among:7,color:[42,47,56,49,21,22],operatornam:49,period:[0,34,37],colorbox:49,colon:[49,56],cancel:[49,28],"70kb":7,bigcirc:49,msrow:44,damag:20,needlessli:46,myserv:7,rebuild:39,mark:[0,44,15,49,5,20,33,35,54,56],addit:[0,1,14,15,28,20,17,49,51,43,6,44,48,22,46,19,10,39,24,56,42],succapprox:49,upharpoonleft:49,arcsin:49,xrightharpoonup:49,mathplay:[42,3,50,43,22,53],breve:49,texfont:6,blacktriangl:49,former:31,those:[49,6,39,17,19,20,21,22,23,48,28,29,46,10,7,41,43,44,37,24,56,51,54,1],"case":[3,49,14,16,19,20,21,22,48,26,28,46,37,7,40,45,31,24,56,51,53,54,1],kappa:49,tostr:28,oldstyl:49,addtext:12,trick:49,invok:53,invoc:7,margin:[56,25],opera10:45,advantag:[53,1,14,7,2],ctrl:22,leadsto:49,henc:37,worri:[19,54],destin:39,somewher:7,updatemath:51,bigwedg:49,develop:[14,37,47,4,44,7],author:[14,15,18,49,20,41,22,36,23,54],media:[56,7,37],postjax:[54,22],same:[5,14,37,42,15,20,49,8,27,43,32,33,25,29,19,52,7,24,1],html:[2,30,5,6,7,9,12,13,14,42,16,19,20,21,22,24,26,27,15,3,32,33,34,35,37,38,39,43,44,45,47,49,50,51,52,53,54,55,56],pad:[12,49,56],knuth:47,mathvari:54,document:[0,14,37,47,15,13,16,49,3,51,5,20,44,22,7,23,53,54,39,24,35],bring:54,finish:[47,1,3,51,52,39],vvdash:49,nest:[44,42,34],availablefont:[6,7,45],someon:49,hslash:49,capabl:[16,23,53],formaterror:39,mani:[49,7,42,52,56,5,46,33,53,39,1],extern:[0,34,46,1,19,52,39],submenu:[22,50,8],appropri:[19,49,43,35,10,24,54],macro:[42,49,20,25,22,7,26],mml_svg:[43,7],leftharpoonup:49,overwithdelim:49,without:[0,14,45,46,47,49,19,6,44,7,11,54,39],model:[13,34,37,16,30,49,53,54,40],bigotim:49,stixfont:6,mml2jax:[44,20,43,32,22,54,26],loaderror:0,when:[0,3,5,6,7,8,9,11,14,15,16,17,18,19,20,25,22,23,24,27,28,29,30,31,32,33,34,35,36,37,10,39,40,41,42,43,44,45,46,47,21,49,50,51,52,48,53,54,55,1],greasemonkei:[7,3],bitmap:47,flavor:[43,7],speed:[53,54,14,42,7],versu:1,strikeout:49,widest:[20,44],asciimathml:15,nleqq:49,filevers:34,except:[43,20,52,53],littl:[0,29],blog:[2,47,49,20,54,7],rescal:53,treatment:49,yuicompressor:42,earli:[7,42],hover:[50,22,36],around:[49,7,15],read:[14,37,42,47,21,19,20,44,7],outermost:21,boldsymbol:49,messsag:18,getjaxbyinputtyp:39,moo:40,world:[23,46,7],lasterror:39,mod:49,sum_:54,blackberri:42,asciimath2jax_process:33,cdot:49,integ:[49,39],server:[49,14,45,42,3,43,20,37,7],either:[0,14,37,2,29,16,49,3,56,5,20,33,21,7,36,19,53,39,55,25],output:[30,49,9,13,14,42,19,20,11,22,24,26,15,39,44,35,10,7,40,43,34,45,47,48,56,50,51,53,54,55],rollov:42,manag:[12,34,37,2,46,47,30,18,49,20,54,48],lesssim:49,node:12,respect:[11,45,28],inlin:[5,20,33,14],constitut:16,pod:49,slice:28,easili:[23,20,54,47],definit:[0,45,42,49,50,43,25,36,23,11,56],shoveright:49,inputid:48,dashleftarrow:49,mathcal:49,complic:[47,53,21,44,55],refer:[19,7,37,13,30,3,52,51,43,6,29,41,46,48,10,39,40,20],arrow:49,power:[1,4],inspect:39,broken:54,thinspac:49,found:[0,37,20,4,46,22,53,10,24],regexp:[5,33],"throw":[24,10,41,3],trianglerighteq:49,comparison:[1,39],ibook:53,firstnam:46,ddddot:49,stretch:49,act:[49,47,1,19,46,25,22,54],industri:47,needsupd:[10,48,51],processor:[49,44,45,1,15,31,47,55,56,30,50,43,20,25,53,9,7,24,54,26,11],hookrightarrow:49,nobreakspac:49,routin:[12,0,52,46,41,10,39,24],nsupseteqq:49,effici:[40,51],elementari:44,lessdot:49,triangledown:49,compos:44,rightharpoondown:49,mathbackground:49,your:[0,2,3,4,5,6,7,8,9,11,13,14,42,43,20,25,22,23,27,15,31,32,33,35,36,37,38,39,49,44,45,46,47,21,1,50,51,52,53,55],compon:[0,30,49,14,43,16,19,20,23,24,26,15,39,44,10,7,40,29,34,56,50,52,54],log:[49,20,37,18],area:[25,18],aren:49,fontwarn:[6,22,26],lor:49,strict:37,compliant:[14,42],interfac:[37,2,20,8,23,38],low:28,lot:[19,25,37],lambda:49,verbatim:49,cloudfront:20,buggi:49,categor:26,faster:[43,53,54,7,42],pull:37,mathml:[3,49,8,9,38,13,42,20,11,23,48,26,15,10,7,43,44,47,24,51,53,54,55],bullet:[49,47],possibl:[0,44,37,15,28,6,56,18,43,20,22,46,53,54,7,40,1,42],"default":[0,30,5,6,7,9,11,14,28,43,18,20,25,22,24,26,27,15,32,33,35,36,37,10,39,41,49,45,31,50,53,54,55],processescap:[5,49,14,7],buildrel:49,notag:49,asiimath2jax:15,embed:44,connect:[43,20,54,7,46],taylor:20,creat:[0,30,4,49,12,18,19,41,48,28,46,10,40,29,34,37,47,24,56,50,52,54,1],certain:[19,29,52],leftrightsquigarrow:49,risingdotseq:49,varliminf:49,file:[0,2,3,49,6,7,8,10,14,15,17,18,19,20,21,22,24,26,28,29,30,46,35,38,39,41,42,43,34,37,31,47,48,56,52,53,54,55,1],momentarili:39,outputjax:[34,16,48,30,41,39,24],fill:[53,55],again:[49,0,39,48,51],iiiint:49,googl:4,pmod:49,event:[0,42,47,30,3,51,43,52,22,19,54,24],wai:[2,3,49,14,18,19,20,41,22,27,28,29,32,33,7,5,37,46,1,51,53,54],getscript:12,you:[1,2,3,4,5,6,7,8,9,11,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,30,31,32,33,35,37,38,39,40,41,42,43,44,45,46,47,49,50,51,52,53,54,55,56],trash:48,poor:53,resolut:23,sequenc:[13,7,37,17,49,30,19,52,39],symbol:[49,20,15,31],mhchem:49,begingroup:49,dashv:49,track:[54,24,4],menuset:[43,22,36],reduc:[49,7],mathcolor:49,lbrace:49,directori:[0,45,42,52,47,48,30,18,43,20,41,22,19,37,10,7,24],descript:[27,32,3,5,6,33,34,22],lbrack:49,hello:46,calle:40,potenti:1,extpfeil:49,escap:[49,25],dst:39,negthickspac:49,lvertneqq:49,all:[0,2,3,5,6,7,13,14,42,43,18,19,20,41,22,23,24,26,27,28,29,30,32,33,34,39,40,49,44,37,46,47,1,52,53,54],consider:7,illustr:51,dollar:[49,14,15,5,20,33,7],mathjax_displai:56,abil:[14,37,42,47,53,54],follow:[30,49,14,42,16,19,20,21,24,26,28,46,37,10,7,40,41,43,45,56,51,54],alt:[3,22],disk:[43,20,7,37],multlinewidth:25,scr:49,articl:47,init:40,program:[34,2,52,16,48,1,30,20,23,54,40],smile:49,cgi:0,introduc:[20,7,53],liter:[5,49],multlin:[49,25],vert:49,far:[0,29,37,15,18],varrho:49,"1px":[12,49,56],verb:49,mechan:[49,28,29,17,1,30,19,52,40],difficult:[46,44,52],loadcomplet:[49,0,39,41,7],veri:8,preferredfont:45,alterant:47,list:[2,30,49,6,8,9,38,7,16,19,20,25,22,24,27,28,32,33,36,37,10,39,5,45,31,47,48,1,50,51,11,54,55],"_html":53,emul:53,adjust:[45,3,51,11,8,38,7],plain:49,small:[45,42,18,49,25,54],dimens:[49,42],getalljax:[39,51],foreground:56,lll:49,tex:[2,3,5,6,7,8,9,10,13,14,42,43,19,20,25,22,23,26,27,15,34,35,37,38,39,41,49,44,45,47,1,51,53,54],zero:[6,17],design:[44,3,4,43,23,38],pass:[0,14,42,28,29,17,1,30,50,43,46,19,54,39,40,26],overlin:49,further:[17,1,53,10,24,54],what:[0,30,4,49,6,13,39,28,20,11,22,23,27,15,32,33,36,7,42,5,44,45,50,51,54],sub:34,section:[3,5,6,7,9,11,14,42,43,25,22,26,27,15,31,32,33,35,36,38,39,49,44,45,46,50,53,55],advanc:[16,13,23,7],abl:[19,14,45,28,2,20,49,51,43,6,44,22,8,23,37,38,7],delet:45,version:[13,14,37,42,15,46,30,3,4,34,43,20,41,7,36,48,53,10,39,24,51],sup:49,"public":[29,37],hasn:[0,14,30,18,10,24],full:[0,42,46,16,3,51,43,20,22,23,54,7],hash:30,geqslant:49,modular:[23,44],ggg:49,trunk:37,standard:[19,37,47,49,43,20,23,53,54,7,56],modifi:[13,14,2,51,49,18,43,20,41,7,19,39,24],valu:[0,30,49,6,9,12,42,17,19,21,22,24,25,26,27,28,31,32,33,36,39,40,5,44,45,46,56,50,51,11,54,55,1],search:[23,13,39,4],sender:19,prior:[49,53,44,3,22],amount:[49,6,39,25,28],action:[0,3,49,39,28,17,18,19,41,24,15,30,46,36,10,7,29,34,47,1,51,52,54],mathjax_wikipedia:3,mml_htmlormml:[14,2,3,43,20,8,53,38,7],llap:49,via:[0,2,30,5,6,14,42,18,19,20,41,48,26,28,3,33,36,37,7,40,43,44,45,1,54],shorthand:51,filenam:[46,14,7],href:[49,21,42],inappropri:19,emptyset:49,simbl:3,decrement:17,establish:43,select:[44,37,45,50,43,11,53,39],hexadecim:49,proceed:[1,21],x41:49,distinct:16,barwedg:49,stretchi:49,rightsquigarrow:49,taken:[19,49,1,51,53],imath:49,ispc:[39,30],toggl:49,vec:49,flat:49,diamond:49,desir:[43,40,3,37],mlongdiv:44,ital:[49,0,47,22,20],flag:22,aleph:49,particular:[12,0,7,37,15,28,46,47,17,56,49,20,29,22,52,53,54,39,40],webkit:[39,42],upsilon:49,mathml3:44,cach:[19,7],showmathmenumsi:[11,42],none:[29,27,45,28,46,5,32,33,22,7,54,39],outlin:42,det:49,dev:4,widehat:49,remain:[43,47],paragraph:[49,6,54,51,20],caveat:[20,24,37],def:[49,25,40],deg:49,mathtip:49,scan:[39,22],myspan:21,challeng:43,registr:41,share:[20,7,37,4],templat:[38,7,2,8],succneqq:49,minimum:[39,45,42],unreli:14,explor:[0,42,3,50,18,49,46,22,53,54,51,24,26],phrase:[49,20,15],mathinput:51,huge:49,rowspan:44,goal:23,awkward:40,secur:[20,3,37],rather:[0,3,5,6,9,14,42,43,17,19,20,41,22,23,48,26,28,30,31,33,7,40,49,44,37,47,56,51,52,53,54,1],anoth:[49,37,29,17,1,18,19,52,10,51,54,26],showmathmath:11,csc:49,snippet:[12,13,27,32,49,4,5,6,33,21,22,39],ddagger:49,stix:[45,42,47,49,6,37,53,54,7],simpl:[53,21,22,18],css:[0,49,6,9,13,14,42,20,11,22,24,26,39,44,35,36,37,7,43,34,45,47,48,56,50,51,53,54,55],unabl:6,regener:[48,51],resourc:42,referenc:6,algebra:47,mtabl:43,variant:47,reflect:[30,51],vdash:49,mstack:44,impliedbi:49,associ:[11,45,28,48,51,49,46,41,10,39,24,54],welcom:4,lhd:49,footer:7,confus:[20,14],ambigu:16,caus:[0,49,6,5,39,18,19,20,25,22,48,15,46,33,34,10,7,29,44,37,24,1,50,51,54],callback:[0,34,28,29,16,17,1,30,52,51,19,46,47,48,10,39,24],firefox3:45,merror:56,unrhd:49,help:[13,14,37,4,20,50,53,7],soon:[7,3,22,51],trade:[53,7],retypeset:51,hierarchi:[7,37],suffer:53,paramet:[0,30,49,12,14,28,17,18,20,25,22,24,26,27,15,29,32,39,10,7,40,41,42,43,46,48,51],style:[12,0,45,42,13,47,49,30,50,18,5,6,33,21,22,36,56,11,54,39,20],arial:[49,45],border:[12,49,56],x221a:44,processupdatetim:39,x221e:54,late:[47,3],isreadi:[34,30],pend:17,amsmathaddit:1,processenviron:5,might:[0,14,37,46,1,4,19,20,25,7,54,44,24],alter:[5,48,51],cee:49,good:[1,3,4],"return":[12,0,44,40,28,29,17,1,52,18,19,46,41,51,48,10,39,24],textstyl:49,longleftarrow:49,getelementbyid:51,wilipedia:47,rlap:49,xtwoheadleftarrow:49,mathscr:49,instruct:[21,20,14,3,2],bigcup:49,ntriangleleft:49,iff:49,iint:49,fulli:[20,1,44],unicod:[49,6,44,45],x2211:54,subsystem:30,originaltext:48,weight:[21,40],setrender:39,hard:[37,42,4,43,20,7],realli:[46,22],nless:49,expect:[49,1,7,22,51],math2:49,math1:49,beyond:[49,4],orient:[16,40,34,30],"try":[37,4,19,20,41,40],looparrowright:49,shortcom:52,skiptag:[5,33],print:[23,53,56,37],occurr:52,msie:[11,39,55],difficulti:49,assist:43,safari3:45,ast:49,offsetx:45,symbian:42,mml:[7,55,43,20,34,53,10,39,48,54],reason:[0,44,15,46,1,3,50,18,49,20,25,39,41],base:[37,14,45,2,28,52,16,30,3,34,6,41,7,48,23,53,39,40],put:[0,14,37,15,52,49,20,7,26],mathr:49,processupdatedelai:39,offseti:45,basi:[53,7,55],succnapprox:49,stanard:49,drupal:2,msbm10:20,showprocessingmessag:[22,26],perhap:[46,7],bumpeq:49,perman:49,elementjax:[34,16,48,30,41,10,24],stixgener:[49,45],getelementsbytagnam:3,assign:[5,46,33],major:[23,53,7,3],notifi:19,boxplu:49,upper:49,feel:4,exchang:47,lastnam:46,number:[0,2,30,49,6,14,42,18,20,21,22,24,25,28,46,39,10,7,41,43,34,37,31,48,1,51,53],grtaphic:54,fadeoutstep:6,done:[17,1,30,49,20,54,7],least:[54,39,7,15],blank:[29,28],stabl:[20,7,37],miss:[49,15,28],differ:[49,7,37,28,46,1,51,19,20,52,54,39,40],script:[0,2,30,5,8,10,12,14,42,43,19,20,41,22,24,39,3,33,35,38,7,49,37,48,1,51,53,54],interact:[7,20,23,54,39,48],smoother:6,construct:[54,1],statement:[1,28],exten:15,illeg:[21,42,7],store:[12,29,14,45,42,28,48,1,51,46,34,35,7,10,39,24,54],xmln:20,option:[5,6,8,9,13,14,43,20,25,22,26,27,15,39,32,33,35,36,7,40,41,49,45,31,21,50,11,54,55],nleftarrow:49,triangleleft:49,ntrianglerighteq:49,selector:[56,22,18],tex2jax_process:5,part:[5,44,37,15,28,52,40,49,8,3,43,20,25,22,19,23,53,54,7,24,1],pars:[49,42,15],mmltoken:49,binom:49,cosh:49,kind:54,aaa:25,prebuilt:20,whenev:[29,44,37],remot:37,remov:[49,7,42,28,29,48,18,5,6,33,22,51,54,39,24],dtd:20,bridg:[14,48],arrang:28,markup:[0,44,15,47,49,20,54],ffff88:56,comput:[45,37,47,49,53,39],nleqslant:49,packag:[37,15,47,49,35,7],expir:12,"null":[12,0,34,45,42,28,29,40,3,18,6,41,22,51,48,10,39,24],built:[13,14,3,53],equival:[12,28,1,51,43,46,21],lim:49,self:[20,44,42],ell:49,also:[3,4,5,12,14,28,43,16,18,19,20,11,22,48,15,46,37,7,40,49,44,45,47,50,51,52,53,54],brack:49,build:20,brace:[49,3],msgroup:44,distribut:[20,38,14,37,7],appendchild:[12,3],addel:12,reach:7,ignoreclass:[5,33],react:29,most:[19,34,37,2,28,47,30,49,3,43,20,41,53,54,7,40,56,42],plan:20,rho:49,alpha:49,rhd:49,vardelta:49,renewenviron:49,clear:[29,45,28,30,18,19],tpl:2,h2o:49,exp:49,latest:[14,37,2,3,4,51,49,20,35,8,53,38,7],leftroot:49,cdata:42,nshortparallel:49,carefulli:[21,45,51],cdn:[49,14,37,42,2,3,51,43,20,35,8,53,38,7],finv:49,particularli:[43,37],rightleftarrow:49,font:[0,49,6,13,14,42,18,20,21,22,23,24,25,37,7,11,45,47,56,50,51,52,53,54],find:[7,4,51,49,6,35,8,54,39],preremoveclass:22,execut:[0,28,29,17,49,30,19,46,54,7,1],pretti:37,solut:[20,54,37,4],delayedx:28,queu:[17,1,7,28,29],factor:[11,45,22,42],noerror:[43,20,49],jaxfil:41,tagsid:[25,26],precnsim:49,express:[19,29,49,51,5,20,33,25,22,53,24,1],strut:49,nativ:[44,16,3,43,11,23,53,54,55],mainten:14,rest:[0,44,1,51,49,20,23,54],konqueror:[53,39],restart:[37,17,1,5,33,7],ie9:[53,37,42],ie8:[53,42],ie7:53,acut:49,vmatrix:49,common:[13,14,15,2,20,47,49,44,43,6,21,7,39,41],set:[0,30,5,6,7,9,12,14,15,43,18,19,20,25,22,48,26,27,28,29,3,31,32,33,35,36,37,39,40,42,49,34,45,46,47,21,56,50,51,52,11,54,55,1],overrightarrow:49,startup:[13,7,42,51,3,1,30,34,19,41,22,39],see:[0,30,4,5,6,7,8,10,14,28,43,17,19,20,11,22,24,26,27,15,29,32,33,35,36,37,38,39,42,49,44,45,46,47,56,50,51,52,53,54,1],barb:49,sec:49,arg:49,ams_hml:7,disadvantag:53,langl:49,inconveni:14,someth:[49,37,4,51,5,20,22],particip:4,won:[1,7,37,42],columnspan:44,subscript:[49,20,42],experi:22,altern:[0,15,49,46,54,40],numer:[39,44],complement:49,javascript:[0,2,3,49,6,8,11,13,14,16,19,20,21,22,23,48,25,26,28,46,36,38,7,40,43,34,45,47,56,50,51,52,53,54,1],isol:[49,42],mailbox:[19,47],bmatrix:49,consumpt:42,distinguish:10,longrightarrow:49,errat:7,classnam:3,popul:30,closur:[46,28,51],last:[0,37,28,17,56,49,39,24,26],delimit:[49,14,42,15,5,20,33,54,7],hyperlink:54,mathzoom:[43,56,24,36,26],nvdash:49,grei:[49,30],context:[5,33,50,22,28],overset:49,hbar:49,whole:[52,39,51,34],load:[0,2,3,49,7,10,13,14,42,17,18,19,20,41,22,23,24,28,29,30,46,35,38,39,43,34,37,47,1,51,52,53,54],markdown:[49,20,54,47],simpli:[5,14,37,15,28,46,17,49,51,43,32,33,27,22,7,23,10,39,24,41,35],point:[49,17,7,31,20],instanti:40,smith:46,usemathmlspac:9,fcolorbox:49,header:[7,37,2,8],suppli:[39,48,22,28],bigve:49,mistak:21,zeta:49,throughout:49,becom:[14,37,28,1,4,19,44,53,40],notaion:13,gneq:49,devic:[23,53,14,42,7],due:14,empti:[34,45,28,1,30,22,54],otherwis:[0,7,28,48,49,18,43,20,34,8,53,10,39,40],invis:[49,37],fire:[30,7,3,51,46],imag:[14,45,42,32,47,3,27,5,6,33,21,23,37,7,24],descib:15,coordin:[17,54,1],understand:[43,54],demand:43,urcorn:49,convers:[49,15],blacksquar:49,look:[12,49,44,45,28,2,29,56,15,4,18,5,20,33,51,8,37,54,39,26],bcancel:49,solid:[12,49,56],histor:53,pitchfork:49,lvert:49,"while":[12,0,14,37,20,55,49,3,31,19,6,44,22,52,54,7,29,1],blacktriangleleft:49,nprec:49,abov:[12,14,45,15,28,20,40,1,3,7,31,51,49,6,22,46,37,39,24,42],circlearrowright:49,bowti:49,everyon:19,loop:[25,48],pack:42,subsect:41,measuredangl:49,vartriangl:49,eqslantless:49,biguplu:49,itself:[40,49,14,37,1,28,29,17,56,30,34,19,44,22,7,48,10,39,24,54,26],overleftarrow:49,limit:[12,0,44,49,31,25,7],peramet:10,rightarrow:49,minim:24,xleftarrow:49,shorten:18,shorter:42,am_htmlormml:[43,20,7],redisplai:18,htmlcsslast:24,conflict:[49,54,42],higher:7,upuparrow:49,optim:[53,42],wherea:49,domin:47,alert:[19,46,1,28],jsmath2jax:[27,35,26,42],temporari:7,user:[30,4,49,6,13,39,18,19,20,11,22,23,28,3,35,36,37,7,43,44,45,50,51,53,54],robust:[19,47],stack:25,recent:[23,3],lower:[34,42,16,30,18,49,22],task:49,older:[44,7],entri:[49,17,56,42,47],searchabl:23,ngeqq:49,textit:49,curvearrowleft:49,normals:49,scriptsiz:49,fallingdotseq:49,explan:[49,20],rvert:49,obscur:[42,18],press:[22,51],amp:[49,42,15],regardless:51,cup:49,setscript:12,blacklozeng:49,endgroup:49,ffeeee:49,rgb:49,input:[30,49,8,9,38,14,42,19,20,41,22,24,25,26,15,31,39,34,35,10,7,40,43,44,47,48,1,51,53,54],subsequ:[49,10,24],sin:49,oslash:49,asciimath:[13,15,31,47,43,20,33,23,54,7,26],format:[13,14,45,15,47,48,49,11,43,20,21,22,23,53,10,44,24,54],big:[49,26],moodl:2,intuit:47,tomathml:[43,48],game:49,insert:[49,27,28,3,5,32,33,41,22,8,38,39,24,54],bit:[11,40],diagup:49,semi:56,varkappa:49,signal:[29,7,28,52,16,30,34,19,46,41,47,39],altough:46,resolv:42,collect:[28,47,56,46,48,1],api:[16,13,23,20],mathrel:49,swarrow:49,asciimath2jax_ignor:33,scrip:14,gtrless:49,creation:[10,30],some:[2,3,49,6,14,15,16,17,19,20,41,22,23,24,26,28,46,39,37,10,7,40,11,44,45,48,1,51,53,54,55],back:[37,15,20,48,49,6,33,24],endtoggl:49,global:[34,28,16,51,49,53],urgent:7,sampl:[37,52,56,30,51,19,20,22],instal:[13,14,45,42,20,37,49,6,8,23,53,7],scale:[45,42,49,11,22,23],substitut:25,mathemat:[0,30,5,6,8,10,11,7,42,43,19,20,25,22,23,24,27,15,32,33,35,36,37,38,39,41,49,44,45,47,48,1,50,51,53,54],larg:[49,0,14,7],prod:49,reproduc:51,sqsubseteq:49,tex2jax:[5,14,42,51,49,3,34,43,20,44,22,54,7,26],machin:[47,37],garamond:49,previou:[46,1,29,28,18],run:[0,3,5,6,9,39,17,19,20,25,22,27,28,30,31,32,33,37,7,29,44,45,46,1,51,52,11,54,55],doteqdot:49,odot:49,step:[6,54,30,2,20],hookleftarrow:49,varsubsetneq:49,carol:49,impos:37,ngeqslant:49,reappear:18,materi:[42,51],dialog:42,rangl:49,succcurlyeq:49,gamma:49,file3:1,file2:[0,1],file1:[0,1],file4:1,bmod:49,msam10:20,prec:49,notat:[15,47,49,20,23,54,7],isjax:39,chang:[49,14,45,42,2,31,3,50,18,43,20,25,7,37,53,10,39,48,54,51,11],announc:52,triangl:49,question:[20,41,4],submit:4,custom:[49,42,15,18,43,20,23,53],adjac:42,perp:49,includ:[0,1,2,3,5,6,7,9,11,14,15,16,19,20,25,22,23,26,27,28,30,31,32,33,34,35,36,37,10,39,41,42,43,44,45,46,47,21,49,50,51,53,54,55,56],suit:[14,6,31,44,7,20],nativemml:[44,47,55,50,43,11,53,54,39,24,26],overleftrightarrow:49,ulcorn:49,properli:[12,0,14,37,42,20,48,1,3,51,6,44,46,39,40],poster:29,atop:49,loadhook:[0,39,46],serif:[49,0,45],link:[14,37,42,2,20,16,49,6,52,7],translat:[54,10,41,24,42],delta:49,line:[49,14,37,42,2,31,47,30,3,5,20,33,27,53,54,7,26],enspac:49,rmoustach:49,qquad:49,divideontim:49,geqq:49,similar:[52,37,28],xmapsto:49,enlarg:36,constant:[19,25],doesn:[19,45,28,15,48,49,43,22,37,7,40],repres:[12,49,27,20,47,56,18,5,6,33,21,22,23,32,24,54],"char":49,mathdiv:[12,46,1,51],tbinom:49,home:[47,0,15],ebook:53,gecko:39,phantom:49,iiint:49,titl:[20,51],sequenti:[52,1,30],invalid:[49,21],llcorner:49,toaudibl:48,bracket:[49,21,22],shoveleft:49,xrightarrow:49,department:37,supseteq:49,nice:3,lozeng:49,delayclear:45,msup:[20,54],alttext:32,varsubsetneqq:49,eval:28,fisher:49,newcommand:49,svn:[20,14,37],rightharpoonup:49,land:49,mimetyp:[48,10,41,24],svg:[42,47,43,53,54,7],supseteqq:49,depth:49,dot:49,leak:48,aquamarin:49,scroll:38,prototyp:40,code:[0,3,4,5,7,8,12,13,14,43,17,19,20,21,22,24,27,28,29,30,32,33,39,41,49,34,46,47,56,51,52,11,1],partial:49,edg:53,queri:54,tiddlywiki:2,edu:37,privat:[52,41,37],elsewher:51,friendli:20,send:[19,29,7],becam:47,sens:54,sent:[19,29,39,47],actiontyp:45,unzip:37,gnsim:49,xxxxxxxx:[20,37],mous:[45,42,50,43,36,54,24],untouch:49,skew:49,tri:[49,0,14,45],ischrom:39,mathit:49,button:37,geograph:7,fewer:43,nleq:49,xcancel:49,userscript:3,maction:[49,45,42],pleas:[21,4],impli:49,smaller:[43,0,54,42],fortun:19,getjaxfrommath:24,natur:[23,20,49,37,54],jump:30,varupsilon:49,download:[0,14,37,42,6,20,22,23,54,7],hspace:49,click:[49,45,50,43,11,22,36,8,54,24],append:[12,37],compat:[42,47,49,22,53,7],index:[20,37,2],compar:53,access:[49,37,42,2,46,48,1,50,43,20,29,23,53,7,40],acronym:47,mathjax:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56],backprim:49,vargamma:49,varsigma:49,leq:49,intercept:20,let:[14,37,44,50,49,20,21,22,39,55],sinh:49,vertic:[5,33,24],sinc:[0,49,14,28,43,17,19,20,11,22,25,15,39,7,40,42,29,44,56,51,52,53,54,1],tex4ht:54,rtime:49,convert:[13,44,15,28,49,3,18,5,35,23,54,24],sqcap:49,larger:[43,20,54,7,53],technolog:[43,23,4],zscale:22,circledast:49,typic:[49,37,15,5,20,10,7],honor:37,chanc:[5,19,33,29,20],firefox:[37,42,3,53,39,55],rgroup:49,bittersweet:49,appli:[49,37,7,40],iskonqueror:39,lessgtr:49,"boolean":39,smallmatrix:49,oval:49,cloud:[14,7],from:[0,2,30,5,7,10,13,14,15,43,18,19,20,25,22,24,27,28,29,3,32,33,35,37,38,39,40,41,42,49,34,45,46,48,1,50,51,53,54],zip:[20,37,42],commun:[19,13,4,20],chi:49,doubl:[49,43,25,22,36,24],upgrad:[6,37,4,13],varphi:49,cho:49,implic:37,few:[49,20,37,35,15],msqrt:[20,54],postprocess:41,simpler:18,newmath:51,src:[5,14,2,20,49,3,27,51,43,32,33,21,35,7,8,53,38,39,1],nsubseteq:49,lippman:15,doublebarwedg:49,projlim:49,"4ac":20,actual:[12,0,44,15,28,17,49,51,19,46,1,22,7,10,39,24,54],versionatleast:39,account:12,alik:3,retriev:12,augment:[40,10,41,24],scalabl:[47,53,54],underwai:1,aperson:46,halt:52,thin:25,control:[5,6,9,11,39,43,20,25,22,27,32,33,36,37,7,49,45,31,56,50,53,55],tau:49,tar:37,process:[0,3,5,7,12,13,14,42,43,17,18,19,20,25,22,24,26,27,15,30,32,33,35,10,39,41,49,44,46,48,1,51,53,54,55],dfrac:49,preformat:42,high:[23,53,54],tag:[2,30,49,8,14,42,19,20,21,22,24,25,26,15,39,3,32,33,35,10,7,5,44,37,48,51,54],tab:37,tan:49,delai:[0,7,45,28,29,50,18,43,22,36,19,54,39],fontwarns:56,gcd:49,importat:16,getelementsbytagnamen:3,subdirectori:[37,10,24,48],instead:[49,14,37,42,15,46,17,1,51,19,20,54,7],class4:40,class2:[5,33,40],smallfrown:49,sim:49,class1:[5,33,40],simplesup:40,frac:49,overridden:[45,24,18,41,48,10,40],mspace:[49,20,44,42],"_svg":53,anothermethod:40,frak:49,filtertext:18,redund:[40,22],essenti:[43,49,54,40,15],light:[49,40],correspond:[39,45,35,7],element:[30,5,6,12,39,42,43,19,20,21,22,24,29,33,10,7,40,49,34,45,48,56,51,52,54,1],reredn:48,newextarrow:49,allow:[2,3,49,14,42,18,19,20,21,22,23,24,25,29,46,36,37,7,40,43,45,47,56,50,11,1],fallback:[37,45],mjx:12,fastest:53,move:[37,14,45],nsucc:49,comma:[56,3,49,22,7,26],dagger:49,mathjax_tooltip:45,movabl:[38,2],chosen:53,clickabl:49,coth:49,varxi:49,pretransl:[41,24],therefor:49,pixel:[47,45,24],multimap:49,crash:22,pure:44,handl:[0,14,15,28,52,47,55,49,3,11,34,19,6,44,7,53,1,39,24,41,42],supsetneq:49,nokia:42,innermost:21,dai:12,automat:[17,1,18,49,20,41,53,54,7,40],front:[43,42],successor:35,gggtr:49,sourceel:[19,48,24,51],anyth:[19,26,4],edit:[43,7,2,8],class3:[5,33,40],februari:13,mode:[49,45,42,5,20,35,37,53,54],varomega:49,"2em":49,genfrac:49,subset:49,delaypost:45,nointerest:29,meta:53,"static":40,our:[14,37,42,4,20,38],meth:39,ie6:45,special:[5,44,15,46,49,43,20,33,22,7,52,23,53,54,39,56],out:[0,14,45,37,1,51,19,6,11,53,54],variabl:[34,28,16,40,30,51,49,46,53,24],lesseqqgtr:49,matrix:49,categori:1,suitabl:49,rel:[0,11,45,42],moveabl:[38,2],merg:[12,39],ref:49,red:[49,20,21],negthinspac:49,nsucceq:49,insid:[42,2],workflow:44,manipul:51,eqslantgtr:49,releas:[20,7,3,37],bleed:42,indent:[25,22],could:[0,14,15,46,16,48,49,4,51,19,20,44,7,54,39,24,1],ask:[4,51,20,25,54,7,24],succ:49,timer:30,david:15,gtreqqless:49,length:3,outsid:[5,53],"0em":[56,22],uproot:49,softwar:[43,20,54,23],rbrace:49,blogger:2,rbrack:49,precapprox:49,spadesuit:49,date:[20,14,37,42,7],uplu:49,clubsuit:49,bigsqcup:49,suffic:20,prioriti:28,"long":[49,20,1,42,50],start:[0,30,49,8,10,13,14,28,19,20,21,22,24,15,39,38,7,29,37,1,52,54],unknown:44,respond:[29,22,4],system:[45,37,2,20,16,30,4,49,6,23,53],messag:[0,14,37,47,20,16,49,30,52,18,43,6,34,41,22,19,39,29],attach:[19,49,24,52,29],attack:20,termin:[5,33],man:20,iota:49,rsh:49,supset:49,"1em":[56,44],gtreqless:49,hdashlin:49,xlongequ:49,ipad:42,preceq:49,gtrdot:49,subsetneq:49,structur:[0,7,28,46,47,51,19,20,34,10,39,24,26],charact:[49,44,45,42,15,31,47,56,5,6,33,25,22,53,54],htaccess:37,seriou:54,bet:37,exhibit:37,"function":[0,7,28,29,47,17,49,3,51,19,46,30,41,52,54,39,40,1],biggl:49,biggm:49,rrightarrow:49,deprec:[43,20,7],unkown:39,lightli:53,close:[44,42,20,3,4,43,6,26],need:[0,1,2,3,4,5,6,7,8,10,14,15,17,18,19,20,25,22,23,24,28,30,46,33,37,38,39,40,41,42,43,44,45,31,47,48,49,11,51,52,53,54,56],turn:[12,5,14,28,29,43,33,44,11],biggr:49,gdef:49,issu:[0,44,4,18,22,7,53,54,39],inform:[0,45,2,29,47,49,30,18,43,46,11,22,19,10,7,24,54],mid:49,fontdir:24,which:[2,30,5,7,10,14,15,43,18,19,20,21,22,24,25,26,27,28,29,3,32,33,34,35,36,37,38,39,40,42,49,44,45,46,48,56,51,53,54,1],hbox:49,mit:49,singl:[0,14,15,28,52,16,49,51,5,20,33,34,23,1,7,56,42],declaremathoper:49,mathjax_preview:[27,5,32,33,22,54],x22d6:49,unless:[20,42,28,53],who:[19,29,4],leftthreetim:49,why:49,underset:49,placement:42,url:[0,14,37,42,3,49,30,50,43,20,7],gather:49,request:[0,42,28,29,49,30,19,46,7,1],face:[45,4,49,6,25,37,26],inde:[53,26],movablelimit:42,nmid:49,determin:[7,45,2,30,49,31,11,22,39,24],flux:1,occasion:7,fact:[29,14,41],backsimeq:49,mathjax_messag:18,leftarrowtail:49,verbos:[47,46,22],bracevert:49,woth:44,curlyeqsucc:49,highest:53,locat:[0,14,37,6,49,30,51,5,32,33,27,22,7,19,54,39,24,20,35],jax:[30,49,9,14,42,16,19,25,22,24,26,15,31,39,35,10,7,40,41,43,34,45,47,48,56,11,51,53,54,55],vartriangleright:49,should:[3,5,7,8,38,14,28,43,17,20,21,22,24,25,15,29,46,33,35,10,39,41,49,44,37,47,56,51,53,55,1],imagefont:[6,45],vartriangleleft:49,suppos:[46,14,7,51],"5px":[12,49],triangleright:49,"5pt":20,local:[49,37,28,20,1,3,51,43,6,22,7],hope:[6,14],precsim:49,liminf:49,woff:37,expres:49,increas:[14,42],bigstar:49,leqslant:49,smash:49,enabl:[49,14,15,2,5,20,33,8,38,7],organ:54,frown:49,stuff:39,she:53,contain:[0,2,3,5,6,12,7,43,16,17,18,19,20,41,22,24,27,28,29,32,33,37,10,39,49,34,45,46,48,56,51,54,1],view:[44,45,16,3,43,20,35,23,37,7],conform:20,frame:18,apolog:14,temporarili:18,troubl:20,issafari:39,asynchron:[0,34,28,29,47,17,1,51,19,46,52,39],statu:[0,37,46],error:[0,14,15,49,3,4,43,20,44,22,10,39,24,41],jmath:49,pattern:[5,33,22],gtrsim:49,favor:14,written:[20,8],quickest:20,theta:49,neither:[6,21],equiv:[49,53],omicron:49,nshortmid:49,"2pt":49,kei:[12,0,28,29,17,19,22,39],texttip:49,"2px":49,entir:[39,22,7,51],closebox:6,ker:49,thumb:1,skipstartuptypeset:22,plugin:[2,50,49,22,8,23,53,54],admin:[38,8],nabla:49,equal:[49,1,39,40],gnapprox:49,etc:[47,1,51,49,22,7],eta:49,equat:[5,27,45,42,20,37,49,31,51,43,32,33,25,22,48,23,53,54,39,24],eth:49,limiti:37,lmoustach:49,onchang:51,comment:[49,42,56,43,20,22,7],varnoth:49,arriv:[19,52],solv:7,harpoon:49,arguement:46,sqcup:49,quit:[53,51],showfontmenu:50,"55em":49,quotat:56,bbb:49,defint:49,sqsupseteq:49,treat:[49,20,15],immedi:[0,3,1,30,51,19,17,7],incldu:54,smallsetminu:49,both:[0,14,42,15,46,47,49,30,43,20,44,1,22,7,8,53,38,39,40,54],alignat:49,varsupsetneq:49,otf:[37,42],psi:49,x_2:49,togeth:[14,28,1,43,44,39],x_1:49,injlim:49,present:[29,44,4,6,22,53,7],cot:49,twoheadrightarrow:49,multi:49,iscallback:28,displaylin:49,align:[49,20,56,44,22],contextu:[13,44,45,48,50,43,34,22,36,53,54,24,11],studentdisplai:51,defin:[30,49,6,14,19,20,25,22,24,26,15,3,46,39,36,10,7,40,41,43,45,56,50,11,1],glossari:[47,13],layer:[42,2],almost:49,curvearrowright:49,site:[49,14,37,2,43,20,22,23,38,7],archiv:[20,37],substanti:[53,14,7],revis:37,greater:[49,53,15],curlywedg:49,displaystyl:[49,31,51],parti:[19,20],cross:37,sqrt:[49,20,54],getx:40,extensiondir:41,oint:49,android:42,cssid:[49,42],curlyve:49,phi:49,http:[14,37,2,3,50,51,49,20,35,8,53,38,7],d3eoax9i5htok0:20,lleftarrow:49,"8em":[49,25],effect:[17,1,3],mrow:[20,54],student:51,canva:54,php:[2,8],executehook:[29,28],off:[49,42,43,52,11,53,7],center:[49,20,56,22],well:[19,44,37,28,46,56,4,51,43,20,33,41,22,52,53,7],exampl:[0,3,4,49,6,7,9,11,12,14,15,17,19,20,25,22,24,26,27,28,29,31,32,33,34,35,36,37,10,39,40,42,5,44,45,46,21,56,50,51,52,48,53,54,55,1],command:[44,37,28,47,17,1,30,51,49,22,7,39],choos:[49,20,53],undefin:[49,20,28,46],setx:40,subsetneqq:49,sibl:42,usual:[28,15,46,1,49,6,41,22,54,7],curlyeqprec:49,paus:[39,37],less:[49,37,15,5,20,33,54,39],obtain:[49,14,37,51,43,20,22,54,7,24],mistaken:54,mathclos:49,mathoutput:51,simultan:[1,30],web:[2,30,49,6,13,14,42,19,20,22,23,48,15,3,35,45,7,29,37,47,1,51,52,53,54],current_them:2,priorit:28,textbf:49,cdotp:49,atopwithdelim:49,valid:[46,14],schedul:46,match:[5,29,33,45],webpag:35,piec:42,varpropto:49,punctuat:42,cpan:49,know:[49,46,19,20,29,10,7,24,54],cfrac:49,mathinn:49,redesign:53,tick:[49,20,33,15],recurs:[39,42],mho:49,nofont:6,like:[3,49,28,17,18,19,20,23,26,15,29,46,33,35,10,7,42,5,44,37,31,47,56,51,52,54,1],lost:46,messagehook:[19,29,39],arctan:49,necessari:[7,3,20,23,53,39],resiz:53,page:[2,30,5,6,7,8,12,13,14,42,16,18,19,20,11,22,23,24,27,15,29,3,32,33,35,37,38,39,43,44,45,46,47,48,49,50,51,52,53,54,1],didn:49,captur:47,linux:39,"export":48,superclass:40,proper:[29,39],guarante:[0,1,51,17],peter:15,librari:[16,1,34,37],glyph:[49,47],kern:49,rspace:49,assum:51,avoid:[14,42,15,49,21,22,53,54,44],thank:15,tooltip:[49,45],checkmark:49,leav:[12,15,51,49,25,55],doublecap:49,supsetneqq:49,preload:[0,20],twoheadleftarrow:49,mpmous:43,daleth:49,upharpoonright:49,journal:47,usag:[49,13],host:[14,7],sphericalangl:49,although:[16,20,37,55,29],offset:[45,24],panel:49,varepsilon:49,about:[4,49,6,14,28,19,20,11,22,24,15,29,31,39,37,10,7,42,43,45,46,51,52,54],ams_html:[49,14,51,43,35,7],rare:1,column:25,mathajx:14,mod_head:37,mapsto:49,constructor:40,fals:[49,45,42,29,48,3,50,5,31,11,22,9,39,40,10,26],bigoplu:49,eqalign:49,own:[49,14,37,42,20,16,1,31,4,43,6,52,53,10,7,24,54,26],amsmath:[49,14,1,43,20,25,7],circledr:49,maxbuff:25,bigtriangledown:49,guard:22,vphantom:49,circlearrowleft:49,transfer:[20,37],much:[31,47,19,52,53,7],bigcap:49,arg1:46,"var":[12,28,1,3,51,19,46,40],stai:[53,7],arg2:46,deliveri:[20,42],propto:49,unexpect:[11,22],precnapprox:49,studentansw:51,bodi:[0,14,51,20,10,7,24],gain:[53,50],lgroup:49,bug:[12,14,37,42,4,18,20,22,54,7],count:3,made:[37,1,4,52,54,48,26],bbbk:49,whether:[49,27,45,46,55,3,31,51,5,32,33,11,22,7,9,39,48,50],wish:[14,46,56,3,4,49,20,7,53,39],displai:[49,6,12,13,39,42,18,19,20,25,22,23,24,27,15,31,33,35,36,7,5,44,37,47,48,50,51,53,54],substack:49,underleftrightarrow:49,mathord:49,gtrapprox:49,below:[2,49,6,9,12,39,20,25,22,48,27,32,33,36,10,7,5,45,31,21,50,52,11,54,24,55],sideset:49,"_htmlormml":53,problem:[14,37,42,15,46,4,51,49,20,44,53,54,7],x03c0:54,"int":49,imagedir:24,dure:[42,28,30,19,41,22,39,48],novemb:14,implement:[12,0,14,16,49,54,43,46,44,19,53,10,40,41],nolimit:49,inf:49,rightleftharpoon:49,probabl:[19,46,7,15,2],oplu:49,helpurl:50,definecolor:49,immateri:1,percent:[11,45],detail:[0,5,6,7,8,13,14,28,43,17,19,20,11,22,27,15,29,32,33,35,36,37,38,39,42,49,44,45,1,50,51,52,53,54],lesseqgtr:49,other:[0,2,30,5,6,7,14,15,43,17,18,19,20,41,22,23,48,28,29,46,33,35,37,39,40,42,49,44,45,47,1,11,51,52,53,54,55],futur:[0,4,18,19,52,53,39,48],branch:[7,37],varieti:54,removeaft:6,repeat:[37,2],star:49,"class":[40,49,34,42,28,29,16,17,5,33,41,22,48,10,24,54,35],thicksim:49,posttransl:[41,24],reflow:[53,24,42],sphinx:2,scientif:47,reliabl:[53,14,3,7],rule:[49,6,9,1,22],mathjax_mathml:3,portion:[54,51],eot:37},objtypes:{"0":"py:method"},titles:["The MathJax.Ajax Object","Using Queues","Using MathJax in popular web platforms","Loading MathJax Dynamically","The MathJax Community","The tex2jax Preprocessor","The FontWarnings extension","Loading and Configuring MathJax","Installing MathJax in WordPress","The MathML input processor","The MathJax.InputJax Class","The NativeMML output processor","The MathJax.HTML Object","MathJax Documentation","Migrating from MathJax v1.0 to v1.1","MathJax AsciiMath Support","The MathJax API","The MathJax.Callback.Queue Class","The MathJax.Message Object","Using Signals","Getting Started","Describing HTML snippets","The Core Configuration Options","What is MathJax?","The MathJax.OutputJax Class","The TeX input processor","Configuration Objects","The jsMath2jax Preprocessor","The MathJax.Callback Class","The MathJax.Callback.Signal Class","The MathJax Startup Sequence","The AsciiMath input processor","The mml2jax Preprocessor","The asciimath2jax Preprocessor","The MathJax variable","Converting to MathJax from jsMath","The MathZoom extension","Installing and Testing MathJax","Using MathJax in Movable Type","The MathJax.Hub Object","The MathJax Object-Oriented Programming Model","The Base Jax Class","What&#8217;s New in MathJax v1.1","Common Configurations","MathJax MathML Support","The HTML-CSS output processor","Using Callbacks","Glossary","The MathJax.ElementJax Class","MathJax TeX and LaTeX Support","The MathMenu extension","Modifying Math on the Page","Synchronizing your code with MathJax","MathJax Output Formats","The MathJax Processing Model","The MMLorHTML configuration options","CSS Style Objects"],objnames:{"0":"Python method"},filenames:["api/ajax","queues","platforms/index","dynamic","community","options/tex2jax","options/FontWarnings","configuration","platforms/wordpress","options/MathML","api/inputjax","options/NativeMML","api/html","index","upgrade","asciimath","api/index","api/queue","api/message","signals","start","HTML-snippets","options/hub","mathjax","api/outputjax","options/TeX","options/index","options/jsMath2jax","api/callback","api/signal","startup","options/AsciiMath","options/mml2jax","options/asciimath2jax","api/variable","jsMath","options/MathZoom","installation","platforms/movable-type","api/hub","api/object","api/jax","whats-new","config-files","mathml","options/HTML-CSS","callbacks","glossary","api/elementjax","tex","options/MathMenu","typeset","synchronize","output","model","options/MMLorHTML","CSS-styles"]}) +\ No newline at end of file diff --git a/docs/html/signals.html b/docs/html/signals.html @@ -99,14 +99,14 @@ it starts listening after they were sent.</p> various extensions. The extension may not be loaded when the user&#8217;s configuration code runs, so the configuration code can&#8217;t modify the extension because it isn&#8217;t there yet. Fortunately, most extensions -signal when they are loaded and initialized via an <tt class="docutils literal"><span class="pre">Extension</span> <span class="pre">[name]</span> <span class="pre">Ready</span></tt> message, -so the configuration code can implement a listener for that message, and -have the listener perform the configuration when the message arrives. -But even if the extension <em>has</em> already been loaded, this will still -work, because the listener will receive the ready signal even if it -has already been posted. In this way, listening for signals is a -robust method of synchronizing code components no matter when they are -loaded and run.</p> +signal when they are loaded and initialized via an <tt class="docutils literal"><span class="pre">Extension</span> <span class="pre">[name]</span> +<span class="pre">Ready</span></tt> message, or just <tt class="docutils literal"><span class="pre">[name]</span> <span class="pre">Ready</span></tt>, so the configuration code +can implement a listener for that message, and have the listener +perform the configuration when the message arrives. But even if the +extension <em>has</em> already been loaded, this will still work, because the +listener will receive the ready signal even if it has already been +posted. In this way, listening for signals is a robust method of +synchronizing code components no matter when they are loaded and run.</p> <p>In some cases, it may be inappropriate for a new listener to receive past messages that were sent to a signal object. There are two ways to handle this: first, a new listener can indicate that it doesn&#8217;t want @@ -121,14 +121,14 @@ also be a JavaScript array containing data, or an object containing message, and can act on it in whatever ways they see fit.</p> <div class="section" id="creating-a-listener"> <h2>Creating a Listener<a class="headerlink" href="#creating-a-listener" title="Permalink to this headline">¶</a></h2> -<p>MathJax maintains two separate signal channels: the <cite>startup signal</cite> -and the <cite>processing signal</cite> (or the <cite>hub signal</cite>). The startup signal -is where the messages about different components starting up and -becoming ready appear. The processing signal is where the messages -are sent about processing mathematics, like the <tt class="docutils literal"><span class="pre">New</span> <span class="pre">Math</span></tt> messages -for when newly typeset mathematics appears on the page. The latter is -cleared when a new processing pass is started (so messages from past -processing runs are not kept).</p> +<p>MathJax maintains two separate pre-defined signal channels: the +<cite>startup signal</cite> and the <cite>processing signal</cite> (or the <cite>hub signal</cite>). +The startup signal is where the messages about different components +starting up and becoming ready appear. The processing signal is where +the messages are sent about processing mathematics, like the <tt class="docutils literal"><span class="pre">New</span> +<span class="pre">Math</span></tt> messages for when newly typeset mathematics appears on the +page. The latter is cleared when a new processing pass is started (so +messages from past processing runs are not kept).</p> <p>The easiest way to create a listener is to use either <tt class="xref py py-meth docutils literal"><span class="pre">MathJax.Hub.Register.StartupHook()</span></tt> or <tt class="xref py py-meth docutils literal"><span class="pre">MathJax.Hub.Register.MessageHook()</span></tt>. The first sets a listener @@ -142,10 +142,11 @@ called when it arrives. For example</p> </div> <p>See the <a class="reference internal" href="startup.html#startup-sequence"><em>MathJax Startup Sequence</em></a> page for details of the messages sent during startup. See also the -<tt class="docutils literal"><span class="pre">test/sample-signals.html</span></tt> file (and its source) for examples of -using signals. This example lists all the signals that occur while -MathJax is processing that page, so it gives useful information about -the details of the signals produced by various components.</p> +<a class="reference external" href="http://cdn.mathjax.org/mathjax/latest/test/sample-signals.html">test/sample-signals.html</a> +file (and its source) for examples of using signals. This example +lists all the signals that occur while MathJax is processing that +page, so it gives useful information about the details of the signals +produced by various components.</p> <p>In this example, the listener starts loading an extra configuration file (from the same directory as the web page). Since it returns the callback from that request, the signal processing will wait until @@ -185,8 +186,8 @@ signal&#8217;s <a class="reference internal" href="api/signal.html#Interest" tit </div> <p>This will cause an alert for every signal that MathJax produces. You probably don&#8217;t want to try this out, since it will produce a <em>lot</em> of -them; instead, use the <tt class="docutils literal"><span class="pre">test/sample-signals.html</span></tt> file, which -displays them in the web page.</p> +them; instead, use the <a class="reference external" href="http://cdn.mathjax.org/mathjax/latest/test/sample-signals.html">test/sample-signals.html</a> +file, which displays them in the web page.</p> <p>See the <a class="reference internal" href="api/signal.html#api-signal"><em>Signal Object</em></a> reference page for details on the structure and methods of the signal object.</p> </div> diff --git a/docs/html/startup.html b/docs/html/startup.html @@ -131,6 +131,10 @@ pushed into the queue:</p> </li> </ol> <ol class="arabic simple" start="5"> +<li>Initialize the Message system (the grey information box in the +lower left)</li> +</ol> +<ol class="arabic simple" start="6"> <li>Load the jax configuration files:<ul> <li>Post the <tt class="docutils literal"><span class="pre">Begin</span> <span class="pre">Jax</span></tt> startup signal</li> <li>Load the jax config files from the <tt class="docutils literal"><span class="pre">MathJax.Hub.config.jax</span></tt> array<ul> @@ -141,7 +145,7 @@ pushed into the queue:</p> </ul> </li> </ol> -<ol class="arabic simple" start="6"> +<ol class="arabic simple" start="7"> <li>Load the extension files:<ul> <li>Post the <tt class="docutils literal"><span class="pre">Begin</span> <span class="pre">Extensions</span></tt> startup signal</li> <li>Load the files from the <tt class="docutils literal"><span class="pre">MathJax.Hub.config.extensions</span></tt> array<ul> @@ -154,17 +158,19 @@ pushed into the queue:</p> </ul> </li> </ol> -<ol class="arabic simple" start="7"> +<ol class="arabic simple" start="8"> <li>Set the MathJax menu&#8217;s renderer value based on the jax that have been loaded</li> </ol> -<ol class="arabic simple" start="8"> -<li>Wait for the onload handler to fire</li> -</ol> <ol class="arabic simple" start="9"> -<li>Set <tt class="docutils literal"><span class="pre">MathJax.isReady</span></tt> to <tt class="docutils literal"><span class="pre">true</span></tt></li> +<li>Wait for the onload handler to fire (in MathJax v2.0 this can +occur on the <tt class="docutils literal"><span class="pre">DOMContentLoaded</span></tt> event rather than the page&#8217;s +<tt class="docutils literal"><span class="pre">onload</span></tt> event, so processing of mathematics can start earlier)</li> </ol> <ol class="arabic simple" start="10"> +<li>Set <tt class="docutils literal"><span class="pre">MathJax.isReady</span></tt> to <tt class="docutils literal"><span class="pre">true</span></tt></li> +</ol> +<ol class="arabic simple" start="11"> <li>Perform the typesetting pass (preprocessors and processors)<ul> <li>Post the <tt class="docutils literal"><span class="pre">Begin</span> <span class="pre">Typeset</span></tt> startup signal</li> <li>Post the <tt class="docutils literal"><span class="pre">Begin</span> <span class="pre">PreProcess</span></tt> hub signal</li> @@ -173,6 +179,11 @@ loaded</li> <li>Clear the hub signal history</li> <li>Post the <tt class="docutils literal"><span class="pre">Begin</span> <span class="pre">Process</span></tt> hub signal</li> <li>Process the math script elements on the page<ul> +<li>There are a number of Hub signals generated during math +processing, including a signal that a <tt class="docutils literal"><span class="pre">Math</span></tt> action is +starting (with a parameter indicating what action that is), +<tt class="docutils literal"><span class="pre">Begin</span></tt> and <tt class="docutils literal"><span class="pre">End</span> <span class="pre">Math</span> <span class="pre">Input</span></tt> messages, and <tt class="docutils literal"><span class="pre">Begin</span></tt> and +<tt class="docutils literal"><span class="pre">End</span> <span class="pre">Math</span> <span class="pre">Output</span></tt> signals.</li> <li>Each new math element generates a <tt class="docutils literal"><span class="pre">New</span> <span class="pre">Math</span></tt> hub signal with the math element&#8217;s ID</li> </ul> @@ -182,7 +193,16 @@ with the math element&#8217;s ID</li> </ul> </li> </ol> -<ol class="arabic simple" start="11"> +<ol class="arabic simple" start="12"> +<li>Jump to the location specified in the URL&#8217;s hash reference, if +any.</li> +</ol> +<ol class="arabic simple" start="13"> +<li>Initiate timers to load the zoom and menu code, if it hasn&#8217;t +already been loading in the configuration (so it will be ready +when the user needs it).</li> +</ol> +<ol class="arabic simple" start="14"> <li>Post the <tt class="docutils literal"><span class="pre">End</span></tt> startup signal</li> </ol> <p>The loading of the jax and extensions in steps 5 and 6 are now done in @@ -193,7 +213,8 @@ extensions can be intermixed. (In general, you will get <cite>Begin Jax</cite> followed by <cite>Begin Extensions</cite>, but the order of <cite>End Jax</cite> and <cite>End Extensions</cite> will depend on the files being loaded.) Both 5 and 6 must complete, however, before 7 will be performed.</p> -<p>See the <tt class="docutils literal"><span class="pre">test/sample-signals.html</span></tt> file to see the signals in action.</p> +<p>See the <a class="reference external" href="http://cdn.mathjax.org/mathjax/latest/test/sample-signals.html">test/sample-signals.html</a> file +to see the signals in action.</p> </div> diff --git a/docs/html/synchronize.html b/docs/html/synchronize.html @@ -59,7 +59,7 @@ yet). Actions such as loading files, loading web-based fonts, and creating stylesheets all happen asynchronously within the browser, and since JavaScript has no method of halting a program while waiting for an action to complete, synchronizing your code with these types of -actions is made much more difficult. MathJax used three mechanisms to +actions is made much more difficult. MathJax uses three mechanisms to overcome this language shortcoming: callbacks, queues, and signals.</p> <p><strong>Callbacks</strong> are functions that are called when an action is completed, so that your code can continue where it left off when the @@ -81,20 +81,22 @@ synchronize with MathJax, but you can also create your own private queues for actions that need to be synchronized with each other, but not to MathJax as a whole. See the <a class="reference internal" href="api/queue.html#api-queue"><em>Queue Object</em></a> reference page for more details.</p> -<p><strong>Signals</strong> are another means of synchronizing your own code with MathJax. -Many of the important actions that MathJax takes (like typesetting new math -on the page, or loading an external component) are &#8220;announced&#8221; by posting a -message to a special object called a <cite>Signal</cite>. Your code can register an -interest in receiving one or more of these signals by providing a callback -to be called when the signal is posted. When the signal arrives, MathJax -will call your code. This works somewhat like an event handler, except -that many different types of events can go through the same signal, and the -signals have a &#8220;memory&#8221;, meaning that if you register an interest in a -particular type of signal and that signal has already occurred, you will be -told about the past occurrences as well as any future ones. See the -<a class="reference internal" href="api/signal.html#api-signal"><em>Signal Object</em></a> reference page for more details. See -also the <tt class="docutils literal"><span class="pre">test/sample-signals.html</span></tt> file in the MathJax <tt class="docutils literal"><span class="pre">test</span></tt> -directory for a working example of using signals.</p> +<p><strong>Signals</strong> are another means of synchronizing your own code with +MathJax. Many of the important actions that MathJax takes (like +typesetting new math on the page, or loading an external component) +are &#8220;announced&#8221; by posting a message to a special object called a +<cite>Signal</cite>. Your code can register an interest in receiving one or more +of these signals by providing a callback to be called when the signal +is posted. When the signal arrives, MathJax will call your code. +This works somewhat like an event handler, except that many different +types of events can go through the same signal, and the signals have a +&#8220;memory&#8221;, meaning that if you register an interest in a particular +type of signal and that signal has already occurred, you will be told +about the past occurrences as well as any future ones. See the +<a class="reference internal" href="api/signal.html#api-signal"><em>Signal Object</em></a> reference page for more details. +See also the <a class="reference external" href="http://cdn.mathjax.org/mathjax/latest/test/sample-signals.html">test/sample-signals.html</a> +file in the MathJax <tt class="docutils literal"><span class="pre">test</span></tt> directory for a working example of using +signals.</p> <p>Each of these is explained in more detail in the links below:</p> <div class="toctree-wrapper compound"> <ul> diff --git a/docs/html/typeset.html b/docs/html/typeset.html @@ -156,10 +156,18 @@ will not occur before the math is typeset.</p> <dl class="describe"> <dt> +<tt class="descname">Rerender()</tt></dt> +<dd><p>to remove the output and reproduce it again (for example, if +CSS has changed that would alter the spacing of the +mathematics). Note that the internal representation isn&#8217;t +regenerated; only the output is.</p> +</dd></dl> + +<dl class="describe"> +<dt> <tt class="descname">Reprocess()</tt></dt> -<dd><p>to remove the output and reproduce it again (for -example, if CSS has changed that would alter the spacing of the -mathematics).</p> +<dd><p>to remove the output and then retranslate the input into the +internal MathML and rerender the output.</p> </dd></dl> <dl class="describe"> @@ -171,6 +179,13 @@ the original <tt class="docutils literal"><span class="pre">&lt;script&gt;</span <dl class="describe"> <dt> +<tt class="descname">needsUpdate()</tt></dt> +<dd><p>to find out if the mathematics has changed so that its output +needs to be updated.</p> +</dd></dl> + +<dl class="describe"> +<dt> <tt class="descname">SourceElement()</tt></dt> <dd><p>to obtain a reference to the original <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> object that is associated with this element jax.</p> @@ -190,7 +205,7 @@ time. This is another situation where you want to use the MathJax queue. If your startup code performs the commands</p> <div class="highlight-javascript"><div class="highlight"><pre><span class="kd">var</span> <span class="nx">studentDisplay</span> <span class="o">=</span> <span class="kc">null</span><span class="p">;</span> <span class="nx">MathJax</span><span class="p">.</span><span class="nx">Hub</span><span class="p">.</span><span class="nx">Queue</span><span class="p">(</span><span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> - <span class="nx">studentDisplay</span> <span class="o">=</span> <span class="nx">MathJax</span><span class="p">.</span><span class="nx">Hub</span><span class="p">.</span><span class="nx">getAllJax</span><span class="p">(</span><span class="s2">&quot;MathDiv&quot;</span><span class="p">);</span> + <span class="nx">studentDisplay</span> <span class="o">=</span> <span class="nx">MathJax</span><span class="p">.</span><span class="nx">Hub</span><span class="p">.</span><span class="nx">getAllJax</span><span class="p">(</span><span class="s2">&quot;MathDiv&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">];</span> <span class="p">});</span> </pre></div> </div> @@ -200,8 +215,11 @@ queue. If your startup code performs the commands</p> </div> <p>to change the student&#8217;s answer to be the typeset version of whatever is in the <tt class="docutils literal"><span class="pre">studentAnswer</span></tt> variable.</p> -<p>Here is a complete example that illustrates this approach (available in a -more full-featured version as <tt class="docutils literal"><span class="pre">test/sample-dynamic.html</span></tt>):</p> +<p>Here is a complete example that illustrates this approach. Note, +however, that Internet Explorer does not fire the <tt class="docutils literal"><span class="pre">onchange</span></tt> event +when you press RETURN, so this example does not work as expected in +IE. A more full-featured version that addresses this problem is +available in <a class="reference external" href="http://cdn.mathjax.org/mathjax/latest/test/sample-dynamic.html">test/sample-dynamic.html</a>.</p> <div class="highlight-html"><div class="highlight"><pre><span class="nt">&lt;html&gt;</span> <span class="nt">&lt;head&gt;</span> <span class="nt">&lt;title&gt;</span>MathJax Dynamic Math Test Page<span class="nt">&lt;/title&gt;</span> @@ -258,6 +276,9 @@ You typed: ${}$ <span class="nt">&lt;/html&gt;</span> </pre></div> </div> +<p>There are a number of additional example pages at <a class="reference external" href="http://cdn.mathjax.org/mathjax/latest/test/examples.html">test/examples.html</a> that +illustrate how to call MathJax dynamically or perform other actions +with MathJax.</p> </div> </div> diff --git a/docs/source/_static/mathjax_mathml.user.js b/docs/source/_static/mathjax_mathml.user.js @@ -10,9 +10,9 @@ if ((window.unsafeWindow == null ? window : unsafeWindow).MathJax == null) { (document.getElementsByTagNameNS == null ? false : (document.getElementsByTagNameNS("http://www.w3.org/1998/Math/MathML","math").length > 0))) { var script = document.createElement("script"); + script.type = "text/javascript"; script.src = "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full"; var config = 'MathJax.Hub.Startup.onload()'; - if (window.opera) {script.innerHTML = config} else {script.text = config} document.getElementsByTagName("head")[0].appendChild(script); } } diff --git a/docs/source/_static/mathjax_wikipedia.user.js b/docs/source/_static/mathjax_wikipedia.user.js @@ -23,9 +23,8 @@ if ((window.unsafeWindow == null ? window : unsafeWindow).MathJax == null) { // Load MathJax and have it process the page // var script = document.createElement("script"); + script.type = "text/javascript"; script.src = "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full"; - var config = 'MathJax.Hub.Startup.onload()'; - if (window.opera) {script.innerHTML = config} else {script.text = config} document.getElementsByTagName("head")[0].appendChild(script); } } diff --git a/docs/source/api/callback.rst b/docs/source/api/callback.rst @@ -58,7 +58,7 @@ A callback specification is any one of the following: the given function, and it would return their sum, ``5``, when the callback is executed. - .. describe:: [object, fn] + .. describe:: [object, fn] An array containing an object to use as `this` and a function to call for the callback. For example, @@ -75,7 +75,7 @@ A callback specification is any one of the following: Similar to the previous case, but with data that is passed to the function as well. - ..describe:: ["method", object] + .. describe:: ["method", object] Here, `object` is an object that has a method called `method`, and the callback will execute that method (with the object as @@ -220,6 +220,26 @@ MathJax.Callback Methods - **callback** --- the callback specification :Returns: the callback object +.. method:: Queue([callback,...]) + + Creates a `MathJax.CallBack.Queue` object and pushes the given + callbacks into the queue. See :ref:`Using Queues <using-queues>` + for more details about MathJax queues. + + :Parameters: + - **callback** --- one or more callback specifications + :Returns: the `Queue` object + +.. method:: Signal(name) + + Looks for a named signal, creates it if it doesn't already exist, + and returns the signal object. See + :ref:`Using Signals <using-signals>` for more details. + + :Parameters: + - **name** --- name of the signal to get or create + :Returns: the `Signal` object + .. method:: ExecuteHooks(hooks[, data[,reset]]) Calls each callback in the `hooks` array (or the single hook if it @@ -231,29 +251,54 @@ MathJax.Callback Methods execute when all the ones returned by the hooks have been completed. Otherwise, :meth:`MathJax.Callback.ExecuteHooks()` returns ``null``. - + :Parameters: - **hooks** --- array of hooks to be called, or a hook - **data** --- array of arguments to pass to each hook in turn - **reset** --- ``true`` if the :meth:`reset()` method should be called :Returns: callback that waits for all the hooks to complete, or ``null`` -.. method:: Queue([callback,...]) +.. method:: Hooks(reset) - Creates a `MathJax.CallBack.Queue` object and pushes the given - callbacks into the queue. See :ref:`Using Queues <using-queues>` - for more details about MathJax queues. + Creates a prioritized list of hooks that are called in order based + on their priority (low priority numbers are handled first). This + is meant to replace :meth:`MathJax.Callback.ExecuteHooks()` and is + used internally for signal callbacks, pre- and post-filters, and + other lists of callbacks. :Parameters: - - **callback** --- one or more callback specifications - :Returns: the `Queue` object + - **reset** --- ``true`` if callbacks can be called more than once + :Returns: the `Hooks` object -.. method:: Signal(name) - - Looks for a named signal, creates it if it doesn't already exist, - and returns the signal object. See - :ref:`Using Signals <using-signals>` for more details. - - :Parameters: - - **name** --- name of the signal to get or create - :Returns: the `Signal` object + The list has the following methods: + + .. method:: Add(hook[,priority]) + + Add a callback to the prioritized list. If ``priority`` is + not provided, the default is 10. The ``hook`` is a `Callback` + specification as described above. + + :Parameters: + - **hook** --- callback specification to add to the list + - **priority** --- priority of the hook in the list (default: 10) + :Returns: the callback object being added + + .. method:: Remove(hook) + :noindex: + + Remove a given hook (as returned from :meth:`Add()` above) + from the prioritized list. + + :Parameters: + - **hook** --- the callback to be removed + :Returns: ``null`` + + .. method:: Execute() + + Execute the list of callbacks, resetting them if requested. + If any of the hooks return callbacks, then ``Execute()`` + returns a callback that will be executed when they all have + completed. + + :Returns: a callback object or ``null`` + diff --git a/docs/source/api/elementjax.rst b/docs/source/api/elementjax.rst @@ -42,13 +42,11 @@ Instance Properties .. describe:: inputJax - A reference to the input jax that created the element. (In the - future, this will be changed to the name of the input jax.) + The name of the input jax that created the element. .. describe:: outputJax - A reference to the output jax that has processed this element. (In - the future, this will be changed to the name of the output jax.) + The name of the output jax that has processed this element. .. describe:: inputID @@ -89,13 +87,25 @@ Methods - **callback** --- the callback specification :Returns: the callback object +.. Method:: Rerender([callback]) + :noindex: + + Removes the output and produces it again (for example, if CSS has + changed that would alter the spacing of the mathematics). Note + that the internal representation isn't regenerated; only the + output is. The `callback`, if any, is called when the process + completes. + + :Parameters: + - **callback** --- the callback specification + :Returns: the callback object + .. Method:: Reprocess([callback]) :noindex: - Removes the output and produces it again. This may be necessary if - there are changes to the CSS styles that would affect the layout - of the mathematics, for example. The `callback`, if any, is - called when the process completes. + Removes the output and then retranslates the input into the + internal form and reredners the output again. The `callback`, if + any, is called when the process completes. :Parameters: - **callback** --- the callback specification @@ -118,6 +128,16 @@ Methods :Returns: the ``<script>`` element +.. Method:: needsUpdate() + + Indicates whether the mathematics has changed so that its output + needs to be updated. + + :Returns: ``true`` if the mathematics needs to be reprocessed, + ``false`` otherwise + + + Output jax may add new methods to the base element jax class to perform exporting to other formats. For example, a MathML output jax could add ``toMathML()``, or an accessibility output jax could add diff --git a/docs/source/api/html.rst b/docs/source/api/html.rst @@ -92,6 +92,15 @@ Methods - **text** --- the text that is to be the script's new content :Returns: ``null`` +.. method:: getScript(script) + + Gets the contents of the ``script`` element, properly taking into + account the browser limitations and bugs. + + :Parameters: + - **script** --- the script whose content is to be retrieved + :Returns: the text of the ``script`` + .. describe:: Cookie.Set(name,data) Creates a MathJax cookie using the ``MathJax.HTML.Cookie.prefix`` diff --git a/docs/source/api/hub.rst b/docs/source/api/hub.rst @@ -31,7 +31,17 @@ Properties .. describe:: processUpdateTime: 250 The minimum time (in milliseconds) between updates of the - "Processing Math" message. + "Processing Math" message. After this amount of time has passed, + and after the next equation has finished being processed, + MathJax will stop processing momentarily so that the update + message can be displayed, and so that the browser can handle user + interaction. + +.. describe:: processUpdateDelay: 10 + + The amount of time (in milliseconds) that MathJax pauses after + issuing its processing message before starting the processing again + (to give browsers time to handle user interaction). .. describe:: signal @@ -60,6 +70,11 @@ Properties running on a Macintosh computer or a Windows computer. They will both be ``false`` for a Linux computer. + .. describe:: isMobile + + This is ``true`` when MathJax is running a mobile version of a + WebKit or Gecko-based browser. + .. describe:: isFirefox, isSafari, isChrome, isOpera, isMSIE, isKonqueror These are ``true`` when the browser is the indicated one, and @@ -97,6 +112,18 @@ Properties } ); +.. describe:: inputJax + + An object storing the MIME types associated with the various + registered input jax (these are the types of the ``<script>`` tags + that store the math to be processed by each input jax). + +.. describe:: outputJax + + An object storing the output jax associate with the various + element jax MIME types for the registered output jax. + + Methods ======= @@ -243,13 +270,31 @@ Methods .. method:: Reprocess([element[,callback]]) - Removes any typeset mathematics from the document or DOM element (or - elements if it is an array of elements), and then processes the - mathematics again, re-typesetting everything. This may be necessary, - for example, if the CSS styles have changed and those changes would - affect the mathematics. The `element` is either the DOM `id` of the - element to scan, a reference to the DOM element itself, or an array of - id's or references. The `callback` is called when the processing is + Removes any typeset mathematics from the document or DOM element + (or elements if it is an array of elements), and then processes + the mathematics again, re-typesetting everything. This may be + necessary, for example, if the CSS styles have changed and those + changes would affect the mathematics. Reprocess calls both the + input and output jax to completely rebuild the data for + mathematics. The `element` is either the DOM `id` of the element + to scan, a reference to the DOM element itself, or an array of + id's or references. The `callback` is called when the processing + is complete. + + :Parameters: + - **element** --- the element(s) to be reprocessed + - **callback** --- the callback specification + :Returns: the callback object + +.. method:: Rerender([element[,callback]]) + + Removes any typeset mathematics from the document or DOM element + (or elements if it is an array of elements), and then renders the + mathematics again, re-typesetting everything from the current + internal version (without calling the input jax again). The + `element` is either the DOM `id` of the element to scan, a + reference to the DOM element itself, or an array of id's or + references. The `callback` is called when the processing is complete. :Parameters: @@ -315,6 +360,21 @@ Methods - **element** --- the element to inspect :Returns: integer (-1, 0, 1) +.. Method:: setRenderer(renderer[,type]) + + Sets the output jax for the given element jax ``type`` (or ``jax/mml`` + if none is specified) to be the one given by ``renderer``, which + must be the name of a renderer, such as ``NativeMML`` or + ``HTML-CSS``. Note that this does not cause the math on the page + to be rerendered; it just sets the renderer for output in the + future (call :meth:``Rerender()`` above to replace the current + renderings by new ones). + + :Parameters: + - **renderer** --- the name of the output jax to use for rendering + - **type** --- the element jax MIME type whose renderer to set + :Returns: ``null`` + .. Method:: Insert(dst,src) Inserts data from the `src` object into the `dst` object. The diff --git a/docs/source/api/inputjax.rst b/docs/source/api/inputjax.rst @@ -56,13 +56,40 @@ Properties Methods ======= -.. Method:: Translate(script) +.. Method:: Process(script,state) + :noindex: + + This is the method that the ``MathJax.Hub`` calls when it needs + the input jax to process the given math ``<script>``. Its default + action is to do the following: + + 1. Start loading any element jax specified in the ``elementJax`` array; + 2. Start loading the jax's ``jax.js`` file; + 3. Start loading the required output jax (so it is ready when needed); and + 4. Redefine itself to simply return the callback for the load operation + (so that further calls to it will cause the processing to wait for the + callback). + + Once the ``jax.js`` file has loaded, this method is replaced by + the jax's ``Translate()`` method (see below), so that + subsequent calls to ``Process()`` will perform the appropriate + translation. + + :Parameters: + - **script** --- reference to the DOM ``<script>`` object for + the mathematics to be translated + - **state** --- a structure containing information about the + current proccessing state of the mathematics + (internal use) + :Returns: an `ElementJax` object, or ``null`` + +.. Method:: Translate(script,state) :noindex: This is the main routine called by MathJax when a ``<script>`` of the appropriate type is found. The default :meth:`Translate()` method throws an error indicating that :meth:`Translate()` hasn't been - redefined, so when the ``jax.js`` file loads, it should override the + defined, so when the ``jax.js`` file loads, it should override the default :meth:`Translate()` with its own version that does the actual translation. @@ -72,6 +99,9 @@ Methods :Parameters: - **script** --- the ``<script>`` element to be translated + - **state** --- a structure containing information about the + current proccessing state of the mathematics + (internal use) :Returns: the `element jax` resulting from the translation .. Method:: Register(mimetype) @@ -87,3 +117,14 @@ Methods - **mimetype** --- the MIME-type of the input this jax processes :Returns: ``null`` +.. Method:: needsUpdate(jax) + :noindex: + + This implements the element jax's ``needsUpdate()`` method, and + returns ``true`` if the ``jax`` needs to be rerendered (i.e., the + text has changed), and ``false`` otherwise. + + :Perameters: + - **jax** --- the element jax to be checked + :Returns: ``true`` if the jax's text has changed, ``false`` otherwise + diff --git a/docs/source/api/jax.rst b/docs/source/api/jax.rst @@ -63,34 +63,20 @@ Instance Properties jax. These can be modified by the author by including a configuration subsection for the specific jax in question. +.. describe:: JAXFILE: "jax.js" + + The name of the file that contains the main code for the jax. Methods ======= -.. Method:: Process(script) - :noindex: - - This is the method that the ``MathJax.Hub`` calls when it needs the - input or output jax to process the given math ``<script>``. Its - default action is to start loading the jax's ``jax.js`` file, and - redefine itself to simply return the callback for the load operation - (so that further calls to it will cause the processing to wait for the - callback). Once the ``jax.js`` file has loaded, this method is - replaced by the jax's :meth:`Translate()` method, so that subsequent calls - to :meth:`Process()` will perform the appropriate translation. - - :Parameters: - - **script** --- reference to the DOM ``<script>`` object for - the mathematics to be translated - :Returns: an `ElementJax` object, or ``null`` - .. Method:: Translate(script) This is a stub for a routine that should be defined by the jax's ``jax.js`` file when it is loaded. It should perform the translation action for the specific jax. For an input jax, it should return the `ElementJax` object that it created. The :meth:`Translate()` method is - never called directly by MathJax; during the :meth:`loadComplete()` + never called directly by MathJax; during the ``loadComplete()`` call, this function is copied to the :meth:`Process()` method, and is called via that name. The default :meth:`Translate()` method throws an error indicating that the :meth:`Translate()` method was not @@ -147,7 +133,10 @@ Methods 5. Post the "[name] Jax Startup" message to the startup signal. 6. Perform the jax's :meth:`Startup()` method. 7. Post the "[name] Jax Ready" message to the startup signal. - 8. Perform the :meth:`MathJax.Ajax.loadComplete()` call for the + 8. Copy the ``preTranslate``, ``Translate``, and + ``postTranslate`` functions to ``preProcess``, ``Process``, + and ``postProcess``. + 9. Perform the :meth:`MathJax.Ajax.loadComplete()` call for the ``jax.js`` file. Note that the configuration process (the :meth:`Config()` call) can diff --git a/docs/source/api/outputjax.rst b/docs/source/api/outputjax.rst @@ -48,17 +48,65 @@ Properties The directory where the jax files are stored (e.g., ``"[MathJax]/jax/output/HTML-CSS"``); +.. describe:: fontDir + + The directory where the fonts are stored (e.g., ``"[MathJax]/fonts"``) + +.. describe:: imageDir + + The directory where MathJax images are found (e.g. ``"[MathJax]/images"``) + Methods ======= -.. Method:: Translate(script) +.. Method:: preProcess(state) + + This is called by ``MathJax.Hub`` to ask the output processor to + prepare to process math scripts. Its default action is to start + loading the jax's ``jax.js`` file, and redefine itself to simply + return the callback for the load operation (so that further calls + to it will cause the processing to wait for the callback). + + Once the ``jax.js`` file has loaded, this method is replaced by + the jax's :meth:`preTranslate()` method, so that subsequent calls + to :meth:`preProcess()` will perform the appropriate translation. + + :Parameters: + - **state** --- a structure containing information about the + current proccessing state of the mathematics + :Returns: ``null`` + +.. Method:: preTranslate(state) + + This routine replaces :meth:`preProcess()` above when the jax's + ``jax.js`` file is loaded. It is called by ``MathJax.Hub`` to ask + the output processor to prepare to process math scripts. (For + example, the HTML-CSS output jax uses this to determine em-sizes + for all the mathematics at once, to minimize page reflows that + slow down Internet Explorer.) + + The routine can use ``state.jax[this.id]`` to obtain the array of + element jax that are to be processed. The output jax can use the + ``state`` variable to maintain its own state information, but + any properties that it adds to the variable should have a prefix + that is the output jax's ID. For example, the HTML-CSS output jax + might use ``state.HTMLCSSlast`` to keep track of the last equation + it processed, or could add ``state.HTMLCSS = {...}`` to create an + object of its own within the state variable. + + :Parameters: + - **state** --- a structure containing information about the + current proccessing state of the mathematics + :Returns: ``null`` + +.. Method:: Translate(script,state) :noindex: This is the main routine called by MathJax when an element jax is to be converted to output. The default :meth:`Translate()` method throws an error indicating that :meth:`Translate()` hasn't been - redefined, so when the ``jax.js`` file loads, it should override the + defined, so when the ``jax.js`` file loads, it should override the default :meth:`Translate()` with its own version that does the actual translation. @@ -66,12 +114,35 @@ Methods element jax for the given script. The translation process may modify the element jax (e.g., if it has data that needs to be stored with the jax), and may insert DOM elements into the - document near the jax's ``<script>`` tag. + document near the jax's ``<script>`` tag. The output jax can use + the ``state`` variable to maintain information about its + processing state, but see :meth:`preTranslate()` above for naming + conventions for properties that are added. :Parameters: - **script** --- the ``<script>`` element to be translated + - **state** --- a structure containing information about the + current proccessing state of the mathematics :Returns: the `element jax` resulting from the translation +.. Method:: postTranslate(state) + + This routines is called by ``MathJax.Hub`` when the translation + of math elements is complete, and can be used by the output + processor to finalize any actions that it needs to complete. + (For example, making the mathematics visible, or forcing a reflow + of the page.) + + The routine can use ``state.jax[this.id]`` to obtain the array of + element jax that were processed, or can use the ``state`` variable + to store its own state information (see :meth:`preProcess()` + above for caveats about naming properties). + + :Parameters: + - **state** --- a structure containing information about the + current proccessing state of the mathematics + :Returns: ``null`` + .. Method:: Register(mimetype) :noindex: @@ -95,3 +166,53 @@ Methods :Parameters: - **jax** --- the element jax whose display should be removed :Returns: ``null`` + + +If an output jax wants its output to handle the contextual menu item +and zooming, then it needs to tie into the event-handling code +(`MathEvents`) and the zoom-handling code (`MathZoom`). That requires +the following methods. + +.. Method:: getJaxFromMath(math) + + This is called by the event-handling code (`MathEvents`) to get + the element jax associated with the DOM element that caused an + event to occur. The output jax will have attached event handlers + to some DOM element that is part of its output, and the + `MathEvents` code uses this routine to map back to the jax + associated with that output. + + :Parameters: + - **math** --- a DOM element that triggered a DOM event + (e.g., a mouse click) + :Returns: the `ElementJax` structure associated with the DOM element + +.. Method:: Zoom(jax,span,math,Mw,Mh) + + This routine is called by the zoom-handling code (`MathZoom`) + when an expression has received its zoom trigger event (e.g., a + double-click). The ``jax`` is the math that needs to be zoomed, + ``span`` is a ``<span>`` element in which the zoomed version of + the math should be placed, ``math`` is the DOM element that + received the zoom trigger event, and ``Mw`` and ``Mh`` are the + maximum width and height allowed for the zoom box (the ``span``). + + The return value is an object with the following properties: + + - ``Y`` --- the vertical offset from the top of the ``span`` to + the baseline of the mathematics + - ``mW`` --- the width of the original mathematics element + - ``mH`` --- the height of the original mathematics element + - ``zW`` --- the width of the zoomed math + - ``zH`` --- the height of the zoomed math + + All of these values are in pixels. + + :Parameters: + - **jax** --- the jax to be zoomed + - **span** --- the ``<span>`` in which to place the zoomed math + - **math** --- the DOM element generating the zoom event + - **Mw** --- the maximum width of the zoom box + - **Mh** --- the maximum height of the zoom box + :Returns: a structure as described above + diff --git a/docs/source/api/variable.rst b/docs/source/api/variable.rst @@ -19,7 +19,7 @@ Main MathJax Components .. describe:: MathJax.Ajax Contains the code for loading external modules and creating - stylesheets. Most of the code that causes most of MathJax to + stylesheets. Most of the code that causes MathJax to operate asynchronously is handled here. .. describe:: MathJax.Message @@ -43,6 +43,11 @@ Main MathJax Components For example, the `tex2jax` preprocessor creates ``MathJax.Extension.tex2jax`` for its code and variables. +.. describe:: MathJax.Menu + + Initially null, this is where the MathJax contextual menu is + stored, when ``extensions/MathMenu.js`` is loaded. + .. describe:: MathJax.Object Contains the code for the MathJax object-oriented programming model. @@ -75,7 +80,11 @@ Properties .. describe:: MathJax.version - The version number of the MathJax library. + The version number of the MathJax library as a whole. + +.. describe:: MathJax.fileversion + + The version number of the ``MathJax.js`` file specifically. .. describe:: MathJax.isReady diff --git a/docs/source/callbacks.rst b/docs/source/callbacks.rst @@ -214,10 +214,10 @@ you simply passed the object's method to ``setTimeout()``. Or you might want to pass an argument to the function called by ``setTimeout()``. (Altough the ``setTimeout()`` function can accept additional arguements that are supposed to be passed on to the code -when it is called, Internet Explorer does not implement that feature, -so you can't rely on it.) You can use a `Callback` object to -do this, and the :meth:`MathJax.Callback()` method will create one for -you. For example, +when it is called, some versions of Internet Explorer do not implement +that feature, so you can't rely on it.) You can use a `Callback` +object to do this, and the :meth:`MathJax.Callback()` method will +create one for you. For example, .. code-block:: javascript diff --git a/docs/source/dynamic.rst b/docs/source/dynamic.rst @@ -6,21 +6,16 @@ Loading MathJax Dynamically MathJax is designed to be included via a ``<script>`` tag in the ``<head>`` section of your HTML document, and it does rely on being -part of the original document in that it uses an ``onload`` event -handler to synchronize its actions with the loading of the page. -If you wish to insert MathJax into a document after it has -been loaded, that will normally occur *after* the page's ``onload`` -handler has fired, and so MathJax will not be able to tell if it is -safe for it to process the contents of the page. Indeed, it will wait -forever for its ``onload`` handler to fire, and so will never process -the page. - -To solve this problem, you will need to call MathJax's ``onload`` -handler yourself, to let it know that it is OK to typeset the -mathematics on the page. You accomplish this by calling the -:meth:`MathJax.Hub.Startup.onload()` method as part of your MathJax -startup script. To do this, you will need to give MathJax an in-line -configuration. +part of the original document in that it uses an ``onload`` or +``DOMContentLoaded`` event handler to synchronize its actions with the +loading of the page. If you wish to insert MathJax into a document +after it has been loaded, that will normally occur *after* the page's +``onload`` handler has fired, and prior to version 2.0, MathJax had to +be told not to wait for the page ``onload`` event by calling +:meth:`MathJax.Hub.Startup.onload()` by hand. That is no longer +necessary, as MathJax v2.0 detects whether the page is already +available and when it is, it processes it immediately rather than +waiting for an event that has already happened. Here is an example of how to load and configure MathJax dynamically: @@ -29,43 +24,37 @@ Here is an example of how to load and configure MathJax dynamically: (function () { var script = document.createElement("script"); script.type = "text/javascript"; - script.src = "http://cdn.mathjax.org/mathjax/latest/MathJax.js"; - - var config = 'MathJax.Hub.Config({' + - 'extensions: ["tex2jax.js"],' + - 'jax: ["input/TeX","output/HTML-CSS"]' + - '});' + - 'MathJax.Hub.Startup.onload();'; - - if (window.opera) {script.innerHTML = config} - else {script.text = config} - + script.src = "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"; document.getElementsByTagName("head")[0].appendChild(script); })(); -You can adjust the ``config`` variable to your needs, but be careful to get -the commas right. The ``window.opera`` test is because some versions of -Opera don't handle setting ``script.text`` properly, while Internet -Explorer doesn't handle setting the ``innerHTML`` of a script tag. - -Here is a version that uses the ``config=filename`` method to -configure MathJax: +If you need to provide in-line configuration, you can do that using a +MathJax's configuration script: .. code-block:: javascript (function () { - var script = document.createElement("script"); + var head = document.getElementsByTagName("head")[0], script; + script = document.createElement("script"); + script.type = "text/x-mathjax-config"; + script[(window.opera ? "innerHTML" : "text")] = + "MathJax.Hub.Config({\n" + + " tex2jax: { inlineMath: [['$','$'], ['\\\\(','\\\\)']] }\n" + + "});" + head.appendChild(script); + script = document.createElement("script"); script.type = "text/javascript"; - script.src = "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full"; - - var config = 'MathJax.Hub.Startup.onload();'; - - if (window.opera) {script.innerHTML = config} - else {script.text = config} - - document.getElementsByTagName("head")[0].appendChild(script); + script.src = "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"; + head.appendChild(script); })(); +You can adjust the configuration to your needs, but be careful to get +the commas right, as Internet Explorer 6 and 7 will not tolerate an +extra comma before a closing brace. The ``window.opera`` test is +because some versions of Opera don't handle setting ``script.text`` +properly, while some versions of Internet Explorer don't handle +setting ``script.innerHTML``. + Note that the **only** reliable way to configure MathJax is to use an in-line configuration block of the type discussed above. You should **not** call :meth:`MathJax.Hub.Config()` directly in your code, as it will @@ -116,9 +105,8 @@ IE+MathPlayer. (document.getElementsByTagNameNS == null ? false : (document.getElementsByTagNameNS("http://www.w3.org/1998/Math/MathML","math").length > 0))) { var script = document.createElement("script"); + script.type = "text/javascript"; script.src = "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full"; - var config = 'MathJax.Hub.Startup.onload()'; - if (window.opera) {script.innerHTML = config} else {script.text = config} document.getElementsByTagName("head")[0].appendChild(script); } } @@ -157,9 +145,8 @@ converting the math images to their original TeX code. // Load MathJax and have it process the page // var script = document.createElement("script"); + script.type = "text/javascript"; script.src = "http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML-full"; - var config = 'MathJax.Hub.Startup.onload()'; - if (window.opera) {script.innerHTML = config} else {script.text = config} document.getElementsByTagName("head")[0].appendChild(script); } } diff --git a/docs/source/model.rst b/docs/source/model.rst @@ -5,7 +5,7 @@ The MathJax Processing Model The purpose of MathJax is to bring the ability to include mathematics easily in web pages to as wide a range of browsers as possible. Authors can specify mathematics in a variety of formats (e.g., -:term:`MathML` or :term:`LaTeX`), and MathJax provides high-quality +:term:`MathML`, :term:`LaTeX`, or :term:`AsciiMath`), and MathJax provides high-quality mathematical typesetting even in those browsers that do not have native MathML support. This all happens without the need for special downloads or plugins, but rendering will be enhanced if high-quality @@ -35,7 +35,8 @@ document is to be typeset as mathematics. In this case, MathJax can run a preprocessor to locate the math delimiters and replace them by the special tags that it uses to mark the formulas. There are preprocessors for :ref:`TeX notation <TeX-support>`, :ref:`MathML -notation <MathML-support>`, and the :ref:`jsMath notation +notation <MathML-support>`, :ref:`AsciiMath notation +<AsciiMath-support>` and the :ref:`jsMath notation <jsMath-support>` that uses `span` and `div` tags. For pages that are constructed programmatically, such as HTML @@ -44,10 +45,12 @@ format (e.g., pages produced from Markdown documents, or via programs like `tex4ht`), it would be best to use MathJax's special tags directly, as described below, rather than having MathJax run another preprocessor. This will speed up the final display of the -mathematics, since the extra preprocessing step would not be needed, -and it also avoids the conflict between the use of the less-than sign, +mathematics, since the extra preprocessing step would not be needed. +It also avoids the conflict between the use of the less-than sign, ``<``, in mathematics and as an HTML special character (that starts -an HTML tag). +an HTML tag), and several other issues involved in having the +mathematics directly in the text of the page (see the documentation on +the various input jax for more details on this). .. _mathjax-script-tags: @@ -69,8 +72,9 @@ kind of script that the tag contains. The usual (and default) value is ``type="text/javascript"``, and when a script has this type, the browser executes the script as a javascript program. MathJax, however, uses the type `math/tex` to identify mathematics in the TeX -and LaTeX notation, and `math/mml` for mathematics in MathML -notation. When the `tex2jax` or `mml2jax` preprocessors run, they +and LaTeX notation, `math/mml` for mathematics in MathML notation, and +`math/asciimath` for mathematics in AsciiMath notation. When the +`tex2jax`, `mml2jax`, or `asciimath2jax` preprocessors run, they create ``<script>`` tags with these types so that MathJax can process them when it runs its main typesetting pass. @@ -197,17 +201,25 @@ specific output format. For example, the NativeMML output jax inserts MathML tags into the page to represent the mathematics, while the HTML-CSS output jax uses HTML with CSS styling to lay out the mathematics so that it can be displayed even in browsers that don't -understand MathML. Output jax could be produced that render the -mathematics using SVG, for example, or that speak an equation for -blind users. The MathJax contextual menu can be used to switch -between the output jax that are available. +understand MathML. MathJax also has an :term:`SVG` output jax that +will render the mathematics using scalable vector grtaphics. Output +jax could be produced that render the mathematics using HTML5 canvas +elements, for example, or that speak an equation for blind users. The +MathJax contextual menu can be used to switch between the output jax +that are available. Each input and output jax has a small configuration file that is loaded when that input jax is included in the `jax` array in the MathJax configuration, and a larger file that implements the core -functionality of that particular jax. The latter file is loaded -the first time the jax is needed by MathJax to process some -mathematics. +functionality of that particular jax. The latter file is loaded the +first time the jax is needed by MathJax to process some mathematics. +Most of the combined configuration files include only the small +configuration portion for the input and output jax, making the +configuraiton file smaller and faster to load for those pages that +don't actually incldue mathematics; the combined configurations that +end in ``-full`` include both parts of the jax, so there is no delay +when the math is to be rendered, but at the expense of a larger +initial download. The **MathJax Hub** keeps track of the internal representations of the various mathematical equations on the page, and can be queried to diff --git a/docs/source/signals.rst b/docs/source/signals.rst @@ -53,14 +53,14 @@ One way that MathJax makes use of this feature is in configuring its various extensions. The extension may not be loaded when the user's configuration code runs, so the configuration code can't modify the extension because it isn't there yet. Fortunately, most extensions -signal when they are loaded and initialized via an ``Extension [name] Ready`` message, -so the configuration code can implement a listener for that message, and -have the listener perform the configuration when the message arrives. -But even if the extension *has* already been loaded, this will still -work, because the listener will receive the ready signal even if it -has already been posted. In this way, listening for signals is a -robust method of synchronizing code components no matter when they are -loaded and run. +signal when they are loaded and initialized via an ``Extension [name] +Ready`` message, or just ``[name] Ready``, so the configuration code +can implement a listener for that message, and have the listener +perform the configuration when the message arrives. But even if the +extension *has* already been loaded, this will still work, because the +listener will receive the ready signal even if it has already been +posted. In this way, listening for signals is a robust method of +synchronizing code components no matter when they are loaded and run. In some cases, it may be inappropriate for a new listener to receive past messages that were sent to a signal object. There are two ways to @@ -79,14 +79,14 @@ message, and can act on it in whatever ways they see fit. Creating a Listener =================== -MathJax maintains two separate signal channels: the `startup signal` -and the `processing signal` (or the `hub signal`). The startup signal -is where the messages about different components starting up and -becoming ready appear. The processing signal is where the messages -are sent about processing mathematics, like the ``New Math`` messages -for when newly typeset mathematics appears on the page. The latter is -cleared when a new processing pass is started (so messages from past -processing runs are not kept). +MathJax maintains two separate pre-defined signal channels: the +`startup signal` and the `processing signal` (or the `hub signal`). +The startup signal is where the messages about different components +starting up and becoming ready appear. The processing signal is where +the messages are sent about processing mathematics, like the ``New +Math`` messages for when newly typeset mathematics appears on the +page. The latter is cleared when a new processing pass is started (so +messages from past processing runs are not kept). The easiest way to create a listener is to use either :meth:`MathJax.Hub.Register.StartupHook()` or @@ -103,10 +103,12 @@ called when it arrives. For example See the :ref:`MathJax Startup Sequence <startup-sequence>` page for details of the messages sent during startup. See also the -``test/sample-signals.html`` file (and its source) for examples of -using signals. This example lists all the signals that occur while -MathJax is processing that page, so it gives useful information about -the details of the signals produced by various components. +`test/sample-signals.html +<http://cdn.mathjax.org/mathjax/latest/test/sample-signals.html>`_ +file (and its source) for examples of using signals. This example +lists all the signals that occur while MathJax is processing that +page, so it gives useful information about the details of the signals +produced by various components. In this example, the listener starts loading an extra configuration file (from the same directory as the web page). Since it returns @@ -154,8 +156,9 @@ signal's :meth:`Interest()` method, as in the following example. This will cause an alert for every signal that MathJax produces. You probably don't want to try this out, since it will produce a *lot* of -them; instead, use the ``test/sample-signals.html`` file, which -displays them in the web page. +them; instead, use the `test/sample-signals.html +<http://cdn.mathjax.org/mathjax/latest/test/sample-signals.html>`_ +file, which displays them in the web page. See the :ref:`Signal Object <api-signal>` reference page for details on the structure and methods of the signal object. diff --git a/docs/source/startup.rst b/docs/source/startup.rst @@ -90,7 +90,12 @@ pushed into the queue: .. -5. Load the jax configuration files: +5. Initialize the Message system (the grey information box in the + lower left) + +.. + +6. Load the jax configuration files: - Post the ``Begin Jax`` startup signal - Load the jax config files from the ``MathJax.Hub.config.jax`` array @@ -101,7 +106,7 @@ pushed into the queue: .. -6. Load the extension files: +7. Load the extension files: - Post the ``Begin Extensions`` startup signal - Load the files from the ``MathJax.Hub.config.extensions`` array @@ -114,20 +119,22 @@ pushed into the queue: .. -7. Set the MathJax menu's renderer value based on the jax that have been +8. Set the MathJax menu's renderer value based on the jax that have been loaded .. -8. Wait for the onload handler to fire +9. Wait for the onload handler to fire (in MathJax v2.0 this can + occur on the ``DOMContentLoaded`` event rather than the page's + ``onload`` event, so processing of mathematics can start earlier) .. -9. Set ``MathJax.isReady`` to ``true`` +10. Set ``MathJax.isReady`` to ``true`` .. -10. Perform the typesetting pass (preprocessors and processors) +11. Perform the typesetting pass (preprocessors and processors) - Post the ``Begin Typeset`` startup signal - Post the ``Begin PreProcess`` hub signal @@ -137,6 +144,12 @@ pushed into the queue: - Post the ``Begin Process`` hub signal - Process the math script elements on the page + - There are a number of Hub signals generated during math + processing, including a signal that a ``Math`` action is + starting (with a parameter indicating what action that is), + ``Begin`` and ``End Math Input`` messages, and ``Begin`` and + ``End Math Output`` signals. + - Each new math element generates a ``New Math`` hub signal with the math element's ID @@ -145,7 +158,18 @@ pushed into the queue: .. -11. Post the ``End`` startup signal +12. Jump to the location specified in the URL's hash reference, if + any. + +.. + +13. Initiate timers to load the zoom and menu code, if it hasn't + already been loading in the configuration (so it will be ready + when the user needs it). + +.. + +14. Post the ``End`` startup signal The loading of the jax and extensions in steps 5 and 6 are now done in @@ -157,4 +181,6 @@ followed by `Begin Extensions`, but the order of `End Jax` and `End Extensions` will depend on the files being loaded.) Both 5 and 6 must complete, however, before 7 will be performed. -See the ``test/sample-signals.html`` file to see the signals in action. +See the `test/sample-signals.html +<http://cdn.mathjax.org/mathjax/latest/test/sample-signals.html>`_ file +to see the signals in action. diff --git a/docs/source/synchronize.rst b/docs/source/synchronize.rst @@ -12,7 +12,7 @@ yet). Actions such as loading files, loading web-based fonts, and creating stylesheets all happen asynchronously within the browser, and since JavaScript has no method of halting a program while waiting for an action to complete, synchronizing your code with these types of -actions is made much more difficult. MathJax used three mechanisms to +actions is made much more difficult. MathJax uses three mechanisms to overcome this language shortcoming: callbacks, queues, and signals. **Callbacks** are functions that are called when an action is @@ -37,20 +37,23 @@ queues for actions that need to be synchronized with each other, but not to MathJax as a whole. See the :ref:`Queue Object <api-queue>` reference page for more details. -**Signals** are another means of synchronizing your own code with MathJax. -Many of the important actions that MathJax takes (like typesetting new math -on the page, or loading an external component) are "announced" by posting a -message to a special object called a `Signal`. Your code can register an -interest in receiving one or more of these signals by providing a callback -to be called when the signal is posted. When the signal arrives, MathJax -will call your code. This works somewhat like an event handler, except -that many different types of events can go through the same signal, and the -signals have a "memory", meaning that if you register an interest in a -particular type of signal and that signal has already occurred, you will be -told about the past occurrences as well as any future ones. See the -:ref:`Signal Object <api-signal>` reference page for more details. See -also the ``test/sample-signals.html`` file in the MathJax ``test`` -directory for a working example of using signals. +**Signals** are another means of synchronizing your own code with +MathJax. Many of the important actions that MathJax takes (like +typesetting new math on the page, or loading an external component) +are "announced" by posting a message to a special object called a +`Signal`. Your code can register an interest in receiving one or more +of these signals by providing a callback to be called when the signal +is posted. When the signal arrives, MathJax will call your code. +This works somewhat like an event handler, except that many different +types of events can go through the same signal, and the signals have a +"memory", meaning that if you register an interest in a particular +type of signal and that signal has already occurred, you will be told +about the past occurrences as well as any future ones. See the +:ref:`Signal Object <api-signal>` reference page for more details. +See also the `test/sample-signals.html +<http://cdn.mathjax.org/mathjax/latest/test/sample-signals.html>`_ +file in the MathJax ``test`` directory for a working example of using +signals. Each of these is explained in more detail in the links below: diff --git a/docs/source/typeset.rst b/docs/source/typeset.rst @@ -127,17 +127,28 @@ The actions you can perform on an element jax include: to set the math text of the element to `newmath` and typeset. + .. describe:: Rerender() + + to remove the output and reproduce it again (for example, if + CSS has changed that would alter the spacing of the + mathematics). Note that the internal representation isn't + regenerated; only the output is. + .. describe:: Reprocess() - to remove the output and reproduce it again (for - example, if CSS has changed that would alter the spacing of the - mathematics). + to remove the output and then retranslate the input into the + internal MathML and rerender the output. .. describe:: Remove() to remove the output for this math element (but not the original ``<script>`` tag). + .. describe:: needsUpdate() + + to find out if the mathematics has changed so that its output + needs to be updated. + .. describe:: SourceElement() to obtain a reference to the original @@ -161,7 +172,7 @@ queue. If your startup code performs the commands var studentDisplay = null; MathJax.Hub.Queue(function () { - studentDisplay = MathJax.Hub.getAllJax("MathDiv"); + studentDisplay = MathJax.Hub.getAllJax("MathDiv")[0]; }); then you can use @@ -173,8 +184,12 @@ then you can use to change the student's answer to be the typeset version of whatever is in the ``studentAnswer`` variable. -Here is a complete example that illustrates this approach (available in a -more full-featured version as ``test/sample-dynamic.html``): +Here is a complete example that illustrates this approach. Note, +however, that Internet Explorer does not fire the ``onchange`` event +when you press RETURN, so this example does not work as expected in +IE. A more full-featured version that addresses this problem is +available in `test/sample-dynamic.html +<http://cdn.mathjax.org/mathjax/latest/test/sample-dynamic.html>`_. .. code-block:: html @@ -232,3 +247,8 @@ more full-featured version as ``test/sample-dynamic.html``): </body> </html> + +There are a number of additional example pages at `test/examples.html +<http://cdn.mathjax.org/mathjax/latest/test/examples.html>`_ that +illustrate how to call MathJax dynamically or perform other actions +with MathJax. diff --git a/test/examples.html b/test/examples.html @@ -0,0 +1,36 @@ +<!DOCTYPE html> +<html> +<head> +<title>MathJax Example Page</title> +<!-- Copyright (c) 2012 Design Science, Inc. --> +<style> +li {margin-top: .25em} +</style> +</head> +<body> + +<h1>MathJax Example Pages</h1> + +View the page source for any of these examples to see how they work. + +<ul> +<li><a href="sample-tex.html">Page using TeX notation</a></li> +<li><a href="sample-mml.html">Page using MathML notation</a></li> +<li><a href="sample-asciimath.html">Page using AsciiMath notation</a></li> +<li><a href="sample.html">Page included several examples TeX equations</a></li> +<li><a href="sample-eqnum.html">Page of TeX equations with automatic numbering</a></li> +<li><a href="sample-eqnum.html">Page of TeX equations with equation references</a></li> +<p> +<li><a href="sample-signals.html">Page showing MathJax signals during page processing</a></li> +<p> +<li><a href="sample-dynamic-steps.html">Showing an equation one step at a time</a></li> +<li><a href="sample-dynamic.html">Display an equation typed in by a user</a></li> +<li><a href="sample-dynamic-2.html">Preview text containing math typed in by a user</a></li> +<p> +<li><a href="sample-loader.html">Loading MathJax into a page after it is loaded</a></li> +<li><a href="sample-loader-config.html">Loading MathJax dynamically with in-line configuration</a></li> + +</ul> + +</body> +</html> diff --git a/test/index-images.html b/test/index-images.html @@ -2,9 +2,9 @@ <html> <head> <title>MathJax Test Page</title> -<!-- Copyright (c) 2009-2011 Design Science, Inc. --> +<!-- Copyright (c) 2009-2012 Design Science, Inc. --> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> +<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <script type="text/x-mathjax-config"> // diff --git a/test/index.html b/test/index.html @@ -2,9 +2,9 @@ <html> <head> <title>MathJax Test Page</title> -<!-- Copyright (c) 2009-2011 Design Science, Inc. --> +<!-- Copyright (c) 2009-2012 Design Science, Inc. --> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> +<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <script type="text/x-mathjax-config"> // diff --git a/test/sample-dynamic-2.html b/test/sample-dynamic-2.html @@ -0,0 +1,117 @@ +<!DOCTYPE html> +<html> +<head> +<title>Dynamic Preview of Textarea with MathJax Content</title> +<!-- Copyright (c) 2012 Design Science, Inc. --> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<meta http-equiv="X-UA-Compatible" content="IE=edge" /> + +<script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + showProcessingMessages: false, + tex2jax: { inlineMath: [['$','$'],['\\(','\\)']] } + }); +</script> +<script type="text/javascript" src="../MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> + +<script> +var Preview = { + delay: 150, // delay after keystroke before updating + + preview: null, // filled in by Init below + buffer: null, // filled in by Init below + + timeout: null, // store setTimout id + mjRunning: false, // true when MathJax is processing + oldText: null, // used to check if an update is needed + + // + // Get the preview and buffer DIV's + // + Init: function () { + this.preview = document.getElementById("MathPreview"); + this.buffer = document.getElementById("MathBuffer"); + }, + + // + // Switch the buffer and preview, and display the right one. + // (We use visibility:hidden rather than display:none since + // the results of running MathJax are more accurate that way.) + // + SwapBuffers: function () { + var buffer = this.preview, preview = this.buffer; + this.buffer = buffer; this.preview = preview; + buffer.style.visibility = "hidden"; buffer.style.position = "absolute"; + preview.style.position = ""; preview.style.visibility = ""; + }, + + // + // This gets called when a key is pressed in the textarea. + // We check if there is already a pending update and clear it if so. + // Then set up an update to occur after a small delay (so if more keys + // are pressed, the update won't occur until after there has been + // a pause in the typing). + // The callback function is set up below, after the Preview object is set up. + // + Update: function () { + if (this.timeout) {clearTimeout(this.timeout)} + this.timeout = setTimeout(this.callback,this.delay); + }, + + // + // Creates the preview and runs MathJax on it. + // If MathJax is already trying to render the code, return + // If the text hasn't changed, return + // Otherwise, indicate that MathJax is running, and start the + // typesetting. After it is done, call PreviewDone. + // + CreatePreview: function () { + Preview.timeout = null; + if (this.mjRunning) return; + var text = document.getElementById("MathInput").value; + if (text === this.oldtext) return; + this.buffer.innerHTML = this.oldtext = text; + this.mjRunning = true; + MathJax.Hub.Queue( + ["Typeset",MathJax.Hub,this.buffer], + ["PreviewDone",this] + ); + }, + + // + // Indicate that MathJax is no longer running, + // and swap the buffers to show the results. + // + PreviewDone: function () { + this.mjRunning = false; + this.SwapBuffers(); + } + +}; + +// +// Cache a callback to the CreatePreview action +// +Preview.callback = MathJax.Callback(["CreatePreview",Preview]); +Preview.callback.autoReset = true; // make sure it can run more than once + +</script> +</head> +<body> + +Type text in the box below:<br/> + +<textarea id="MathInput" cols="60" rows="10" onkeyup="Preview.Update()" style="margin-top:5px"> +</textarea> +<br/><br/> +Preview is shown here: +<div id="MathPreview" style="border:1px solid; padding: 3px; width:50%; margin-top:5px"></div> +<div id="MathBuffer" style="border:1px solid; padding: 3px; width:50%; margin-top:5px; +visibility:hidden; position:absolute; top:0; left: 0"><div> + +<script> +Preview.Init(); +</script> + +</body> +</html> diff --git a/test/sample-dynamic-steps.html b/test/sample-dynamic-steps.html @@ -2,9 +2,9 @@ <html> <head> <title>MathJax Dynamic Steps Test Page</title> -<!-- Copyright (c) 2011 Design Science, Inc. --> +<!-- Copyright (c) 2011-2012 Design Science, Inc. --> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> +<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <script type="text/x-mathjax-config"> // diff --git a/test/sample-dynamic.html b/test/sample-dynamic.html @@ -2,17 +2,11 @@ <html> <head> <title>MathJax Dynamic Math Test Page</title> -<!-- Copyright (c) 2010-2011 Design Science, Inc. --> +<!-- Copyright (c) 2010-2012 Design Science, Inc. --> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> +<meta http-equiv="X-UA-Compatible" content="IE=edge" /> -<script type="text/x-mathjax-config"> - MathJax.Hub.Config({ - extensions: ["tex2jax.js"], - jax: ["input/TeX","output/HTML-CSS"] - }); -</script> -<script type="text/javascript" src="../MathJax.js"></script> +<script type="text/javascript" src="../MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> <style> input {margin-top: .7em} @@ -53,8 +47,9 @@ input {margin-top: .7em} }); // - // The onchange event handler that typesets the - // math entered by the user + // The onchange event handler that typesets the math entered + // by the user. Hide the box, then typeset, then show it again + // so we don't see a flash as the math is cleared and replaced. // window.UpdateMath = function (TeX) { QUEUE.Push(HIDEBOX,["Text",math,"\\displaystyle{"+TeX+"}"],SHOWBOX); diff --git a/test/sample-eqnum.html b/test/sample-eqnum.html @@ -0,0 +1,138 @@ +<!DOCTYPE html> +<html> +<head> +<title>MathJax Equation Numbering</title> +<!-- Copyright (c) 2012 Design Science, Inc. --> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<meta http-equiv="X-UA-Compatible" content="IE=edge" /> + +<script type="text/x-mathjax-config"> + MathJax.Hub.Config({ TeX: { equationNumbers: {autoNumber: "AMS"} } }); +</script> +<script type="text/javascript" src="../MathJax.js?config=TeX-AMS_HTML"></script> + +<style> +h1 { + background: #CCCCCC; + padding: .2em 1em; + border-top: 3px solid #666666; + border-bottom: 3px solid #999999; +} +</style> + +</head> +<body> + +<center> +<h1>A test of Equation Numbering</h1> +</center> + +<div style="padding:0 2em"> +<hr> +Equation: + +\begin{equation} +E = mc^2 +\end{equation} + +Equation*: + +\begin{equation*} +E = mc^2 +\end{equation*} + +<hr> +Brackets: + +\[E = mc^2\] + +Brackets tagged: + +\[E = mc^2\tag{x}\] + +<hr> +Split: + +\begin{equation} +\begin{split} +a& =b+c-d\\ +& \quad +e-f\\ +& =g+h\\ +& =i +\end{split} +\end{equation} + +<hr> +Multline: + +\begin{multline} + a+b+c+d+e+f+g\\ + M+N+O+P+Q\\ + R+S+T\\ + u+v+w+x+y+z +\end{multline} + +Multline*: + +\begin{multline*} + a+b+c+d+e+f+g\\ + M+N+O+P+Q\\ + R+S+T\\ + u+v+w+x+y+z +\end{multline*} + +<hr> +Gather: + +\begin{gather} +a_1=b_1+c_1\\ +a_2=b_2+c_2-d_2+e_2 +\end{gather} + +Gather*: + +\begin{gather*} +a_1=b_1+c_1\\ +a_2=b_2+c_2-d_2+e_2 +\end{gather*} + +<hr> +Align: + +\begin{align} +a_1& =b_1+c_1\\ +a_2& =b_2+c_2-d_2+e_2 +\end{align} + +Align*: + +\begin{align*} +a_1& =b_1+c_1\\ +a_2& =b_2+c_2-d_2+e_2 +\end{align*} + +Align: + +\begin{align} +a_{11}& =b_{11}& a_{12}& =b_{12}\\ +a_{21}& =b_{21}& a_{22}& =b_{22}+c_{22} +\end{align} + +Align with \notag and \tag: + +\begin{align} +a_{11}& =b_{11}& a_{12}& =b_{12}\notag\\ +a_{21}& =b_{21}& a_{22}& =b_{22}+c_{22} \tag{y} +\end{align} + +Align* with \tag: + +\begin{align*} +a_1& =b_1+c_1\tag{z}\\ +a_2& =b_2+c_2-d_2+e_2 +\end{align*} + +</div> + +</body> +</html> diff --git a/test/sample-eqrefs.html b/test/sample-eqrefs.html @@ -0,0 +1,85 @@ +<!DOCTYPE html> +<html> +<head> +<title>MathJax Equation References</title> +<!-- Copyright (c) 2012 Design Science, Inc. --> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<meta http-equiv="X-UA-Compatible" content="IE=edge" /> + +<script type="text/x-mathjax-config"> + MathJax.Hub.Config({ TeX: { equationNumbers: {autoNumber: "all"} } }); +</script> +<script type="text/javascript" src="../MathJax.js?config=TeX-AMS_HTML"></script> + +<style> +h1 { + background: #CCCCCC; + padding: .2em 1em; + border-top: 3px solid #666666; + border-bottom: 3px solid #999999; +} +</style> + +</head> +<body> + +<center> +<h1>A test of Equation References</h1> +</center> + +<div style="padding:0 2em"> +<hr> +Here is a labeled equation: +$$x+1\over\sqrt{1-x^2}\label{ref1}$$ +with a reference to ref1: \ref{ref1}, +and another numbered one with no label: +$$x+1\over\sqrt{1-x^2}$$ +This one uses \nonumber: +$$x+1\over\sqrt{1-x^2}\nonumber$$ +<p> +<HR> +<p> +Here's one using the equation environment: +\begin{equation} +x+1\over\sqrt{1-x^2} +\end{equation} +and one with equation* environment: +\begin{equation*} +x+1\over\sqrt{1-x^2} +\end{equation*} +<p> +<HR> +<p> +This is a forward reference [\ref{ref2}] and another \eqref{ref2} for the +following equation: +$$x+1\over\sqrt{1-x^2}\label{ref2}$$ +More math: +$$x+1\over\sqrt{1-x^2}$$ +Here is a ref inside math: $\ref{ref2}+1$ and text after it. + +\begin{align} +x& = y_1-y_2+y_3-y_5+y_8-\dots +&& \text{by \eqref{ref1}}\\ +& = y'\circ y^* && \text{(by \eqref{ref3})}\\ +& = y(0) y' && \text {by Axiom 1.} +\end{align} + +Here's a bad ref [\ref{ref4}] to a nonexistent label. +<p> +<HR> +<p> +An alignment: +\begin{align} +a&=b\label{ref3}\cr +&=c+d +\end{align} +and a starred one: +\begin{align*} +a&=b\cr +&=c+d +\end{align*} + +</div> + +</body> +</html> diff --git a/test/sample-loader-config.html b/test/sample-loader-config.html @@ -0,0 +1,55 @@ +<!DOCTYPE html> +<html> +<head> +<title>Load MathJax with in-line configuration after the page is ready</title> +<!-- Copyright (c) 2012 Design Science, Inc. --> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<meta http-equiv="X-UA-Compatible" content="IE=edge" /> + +<script type="text/javascript"> +// +// We wait for the onload function to show that MathJax is laoded after +// the page is ready, and then use setTimeout to prove that MathJax is +// definitely loaded after the page is displayed and active. MathJax is +// loaded two seconds after the page is ready. +// +window.onload = function () { + setTimeout(function () { + var head = document.getElementsByTagName("head")[0], script; + script = document.createElement("script"); + script.type = "text/x-mathjax-config"; + script[(window.opera ? "innerHTML" : "text")] = + "MathJax.Hub.Config({\n" + + " tex2jax: { inlineMath: [['$','$'], ['\\\\(','\\\\)']] }\n" + + "});" + head.appendChild(script); + script = document.createElement("script"); + script.type = "text/javascript"; + script.src = "../MathJax.js?config=TeX-AMS-MML_HTMLorMML"; + head.appendChild(script); + },2000) +} +</script> + +<style> +h1 { + text-align: center; + background: #CCCCCC; + padding: .2em 1em; + border-top: 3px solid #666666; + border-bottom: 3px solid #999999; +} +</style> + +</head> +<body> + +<h1>Adding MathJax with In-Line Configuration</h1> + +<p> +When $a \ne 0$, there are two solutions to $ax^2 + bx + c = 0$ and they are +$$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$ +</p> + +</body> +</html> diff --git a/test/sample-loader.html b/test/sample-loader.html @@ -0,0 +1,47 @@ +<!DOCTYPE html> +<html> +<head> +<title>Load MathJax after the page is ready</title> +<!-- Copyright (c) 2012 Design Science, Inc. --> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<meta http-equiv="X-UA-Compatible" content="IE=edge" /> + +<script type="text/javascript"> +// +// We wait for the onload function to show that MathJax is laoded after +// the page is ready, and then use setTimeout to prove that MathJax is +// definitely loaded after the page is displayed and active. MathJax is +// loaded two seconds after the page is ready. +// +window.onload = function () { + setTimeout(function () { + var script = document.createElement("script"); + script.type = "text/javascript"; + script.src = "../MathJax.js?config=TeX-AMS-MML_HTMLorMML"; + document.getElementsByTagName("head")[0].appendChild(script); + },2000) +} +</script> + +<style> +h1 { + text-align: center; + background: #CCCCCC; + padding: .2em 1em; + border-top: 3px solid #666666; + border-bottom: 3px solid #999999; +} +</style> + +</head> +<body> + +<h1>Adding MathJax After the Page is Loaded</h1> + +<p> +When \(a \ne 0\), there are two solutions to \(ax^2 + bx + c = 0\) and they are +$$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$ +</p> + +</body> +</html> diff --git a/test/sample-signals.html b/test/sample-signals.html @@ -2,9 +2,9 @@ <html> <head> <title>MathJax Signals Test Page</title> -<!-- Copyright (c) 2010-2011 Design Science, Inc. --> +<!-- Copyright (c) 2010-2012 Design Science, Inc. --> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> +<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <!-- | This example shows how to use MathJax's signal mechanism to find out diff --git a/test/sample.html b/test/sample.html @@ -2,9 +2,9 @@ <html> <head> <title>MathJax Test Page</title> -<!-- Copyright (c) 2009-2011 Design Science, Inc. --> +<!-- Copyright (c) 2009-2012 Design Science, Inc. --> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> -<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> +<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <script type="text/x-mathjax-config"> MathJax.Hub.Config({