DocBook doesn't define elements for writing mathematical equations. Only few elements exist that tell how equation should be displayed (inlined, block):
inlineequation
tells that the equation is
inlined,
informalequation
tells that the equation is displayed
as a block, without a title.
equation
tells that the equation is displayed as a
block, with or without a title.
These tags include a graphic (graphic
or
mediaobject
) or an alternative text equation, as shown by
the example.
Example 3.5. Equation taken from TDG
<equation><title>Last Theorem of Fermat</title> <alt>x^n + y^n ≠ z^n ∀ n ≠ 2</alt> <graphic fileref="figures/fermat"></graphic> </equation>
The principle is to use only the alt
element. If
initially alt
contains actually the text to print, it is
chosen to use this element to embed LaTeX mathematical equations. This choice
has the following advantages:
The translation done by dblatex is really easy, since the equation is already written in LaTeX.
LaTeX is one of the best word processor to render mathematical formulas.
One doesn't need to write the equations in MathML.
This method isn't specific to this tool (see the following section).
The dblatex implementation is as light as possible. This is why it is up to the writer to properly use the mathematical delimiters ($, \(, \), \[, \]). By this way the writer fully controls how he writes equations.
By default dblatex checks that
consistent mathematical
delimiters or environment are used in alt
and it inserts the
default math mode delimiters if dblatex thinks they are missing, but
you can ask dblatex to write directly the alt
content
without any action. To do this, use the texmath
Processing
Instruction with delimiters
set to 'user'.
For example, Example 3.6, “Equation with user delimiters” has user specific delimiters:
Example 3.6. Equation with user delimiters
In the XML source this equation uses a specific align*
environment and the texmath
PI to let the equation as is:
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"> <equation> <title>Equation block with align tabs</title> <alt><?texmath delimiters="user"?><![CDATA[\begin{align*} S & = \left\lfloor { { N \bmod 65536 } \over 32768 } \right\rfloor \\ E & = \left\lfloor { { N \bmod 32768 } \over 1024 } \right\rfloor \\ M & = N \bmod 1024. \end{align*}]]></alt> </equation>
This implementation is not contradictory nor specific. In particular, the DBTeXMath proposal to extend the DSSSL stylesheets used by jade follows the same approach, and is integrated in the Norman Walsh XSL stylesheets.
The following examples show how to write the equations.
Example 3.7. Inlined Equation
The formula is inlined in the paragraph. Its XML source is:
<para>The formula <inlineequation id="eg-inlineequation"> <alt>$C = \alpha + \beta Y^{\gamma} + \epsilon$</alt> <graphic fileref="figures/eq1"/> </inlineequation> is inlined in the paragraph. Its XML source is:</para>
Example 3.8. Equation in a block
The following formula:
is displayed in a separate block. The XML source is:
<para>The following formula: <informalequation> <alt>\[C = \alpha + \beta Y^{\gamma} + \epsilon\]</alt> <graphic fileref="figures/eq1"/> </informalequation> is displayed in a separate block. The XML source is:</para>
Example 3.9. Equation in a float
The formula Equation 3.2, “Simple Formula” below:
is displayed in a block with a title. Its XML source is:
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"> <para>The formula <xref linkend="eq-with-title"/> below: <equation id="eq-with-title"> <title>Simple Formula</title> <alt>\[C = \alpha + \beta Y^{\gamma} + \epsilon\]</alt> <graphic fileref="figures/eq1"/> </equation> is displayed in a block with a title. Its XML source is:</para>
Example 3.10. Equation without a title
The formula Equation 3.3 below:
is displayed as a latex equation with its own equation numbering.
Its XML source is:
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE para PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"> <para>The formula <xref linkend="eq-with-no-title"/> below: <equation id="eq-with-no-title"> <alt>C = \alpha + \beta Y^{\gamma} + \epsilon</alt> <graphic fileref="figures/eq4"/> </equation> is displayed as a latex equation with its own equation numbering. Its XML source is:</para>
You can write MathML equations in a DocBook based document, by using the MathML Module for DocBook XML instead of the DocBook DTD.
dblatex now translates the MathML equations to latex by using the excellent stylesheets of the XSLT MathML Library by Vasil Yaroshevich. A large amount of tests from the W3C MathML Test Suite 2.0 is supported (657 of 712 tests). The test file used to validate the MathML stylesheets is provided in the package.