texext
contains a couple of Sphinx extensions for working with LaTeX math.
math_dollar
replaces math expressions between dollars in ReST with
equivalent inline math.
For example:
Here is some math: $a = 2$
will be replaced by:
Here is some math: :math:`a = 2`
The extension makes some effort not to replace dollars that aren't meant as math, but please check your output carefully, and submit an issue on the texext issue tracker if we have messed up.
To enable math_dollar, make sure that the texext
package is on your
Python path, and add texext.math_dollar
to your list of extensions in the
Sphinx conf.py
. If you want math_dollar to process docstrings, you
should add sphinx.ext.autodoc
higher up your extensions list than
math_dollar
.
Users of sympy may want to generate LaTeX
expressions dynamically in Sympy, and then render them in LaTeX in the built
pages. You can do this with the mathcode
directive:
.. mathcode:: import sympy a, b = sympy.symbols('a, b') a * 10 2 * b
The directive runs sympy.latex()
on the return result of the final
expression, and embeds it in a .. math::
directive, resulting in
equivalent output to sphinx of:
.. math:: 10 a 2 b
Context (namespace) is preserved by default, so you can use context in subsequent directives, e.g.:
.. mathcode:: a * 5 3 * b
If the last expression in the mathcode block is not an expression, the context gets updated, but the extension generates no math directive to the output. This allows you to have blocks that fill in calculations without rendering to the page. For example, this generates no output:
.. mathcode:: expr = a * 4
You can use the generated context in a later directive:
.. mathcode:: expr
To reset the context (namespace), use the newcontext
option:
.. mathcode:: :newcontext: import sympy # again
If you would like mathcode to share a namespace with the matplotlib
plot_directive, set the following in your conf.py
:
# Config of mathcode directive mathcode_use_plot_ns = True
Note
If you want to use the plot_directive context from within mathcode directives, you need to list the plot_directive above the mathcode directive in your sphinx extension list. All the plot directives code will get run before all the mathcode directive code.
Conversely, if you want to use the mathcode directive context from the plot_directive, list mathcode first in your sphinx extension list.
Note
By default, the Matplotlib plot_directive
will clear the namespace
context for each directive, so you may want to use the :context:
option to the plot directive, most of the time.
If you are using Nb2plots for your plots, and you want Mathcode to share a namespace with the Nb2plots plot directive, you will need to specify the Nb2plots plot context directly:
# Config of mathcode directive mathcode_use_plot_ns = True mathcode_plot_context = 'nb2plots.nbplots.plot_context'
More generally if you want to work with a customized version of the
plot_directive, you need to supply the name of the plot context dictionary for
the plot directive, as a string. For example, if you have a custom plot
directive module importable as import my_path.plot_directive
, with the
plot context in my_path.plot_directive.plot_context
, then your conf.py
should have lines like these:
# Config of mathcode directive mathcode_plot_context = "my_path.plot_directive.plot_context"
The plot context is a string rather than the attribute itself in order to let
sphinx pickle the configuration between runs. This allows sphinx to avoid
building pages that have not changed between calls to sphinx-build
.
To enable the mathcode directive, make sure that the texext
package is on
your Python path, and add textext.mathcode
to your list of extensions in
the Sphinx conf.py
.
See https://github.com/matthew-brett/texext
Released under the BSD two-clause license - see the file LICENSE
in the
source distribution.
travis-ci kindly tests the code automatically under Python versions 2.7, and 3.6 through 3.8.
The latest released version is at https://pypi.python.org/pypi/texext
Please put up issues on the texext issue tracker.