mathml2latex 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +47 -0
- data/Rakefile +19 -0
- data/lib/mathml2latex.rb +27 -0
- data/lib/mathml2latex/mathml_latex_service.rb +42 -0
- data/lib/mathml2latex/symbols.rb +1561 -0
- data/lib/mathml2latex/version.rb +3 -0
- data/lib/mathml2latex/xslt/elements/menclose.xsl +39 -0
- data/lib/mathml2latex/xslt/elements/merror.xsl +8 -0
- data/lib/mathml2latex/xslt/elements/mfenced.xsl +64 -0
- data/lib/mathml2latex/xslt/elements/mfrac.xsl +56 -0
- data/lib/mathml2latex/xslt/elements/mi_mn_mo_mtext_ms.xsl +199 -0
- data/lib/mathml2latex/xslt/elements/mmultiscripts.xsl +61 -0
- data/lib/mathml2latex/xslt/elements/mover.xsl +66 -0
- data/lib/mathml2latex/xslt/elements/mphantom.xsl +10 -0
- data/lib/mathml2latex/xslt/elements/mroot.xsl +21 -0
- data/lib/mathml2latex/xslt/elements/mrow.xsl +8 -0
- data/lib/mathml2latex/xslt/elements/mspace.xsl +24 -0
- data/lib/mathml2latex/xslt/elements/msqrt.xsl +10 -0
- data/lib/mathml2latex/xslt/elements/mstyle.xsl +39 -0
- data/lib/mathml2latex/xslt/elements/msub.xsl +12 -0
- data/lib/mathml2latex/xslt/elements/msubsup.xsl +14 -0
- data/lib/mathml2latex/xslt/elements/msup.xsl +12 -0
- data/lib/mathml2latex/xslt/elements/mtable.xsl +86 -0
- data/lib/mathml2latex/xslt/elements/mtd.xsl +30 -0
- data/lib/mathml2latex/xslt/elements/mtr.xsl +11 -0
- data/lib/mathml2latex/xslt/elements/munder.xsl +73 -0
- data/lib/mathml2latex/xslt/elements/munderover.xsl +92 -0
- data/lib/mathml2latex/xslt/includes.xsl +30 -0
- data/lib/mathml2latex/xslt/mml2latex.xsl +30 -0
- data/lib/mathml2latex/xslt/shared/color.xsl +117 -0
- data/lib/mathml2latex/xslt_functions.rb +29 -0
- data/spec/fixtures/basic/aligned_equations.xml +37 -0
- data/spec/fixtures/basic/arrow_accent.xml +11 -0
- data/spec/fixtures/basic/backspace.xml +6 -0
- data/spec/fixtures/basic/bottom_parenthesis.xml +12 -0
- data/spec/fixtures/basic/definite_integral_with_differential.xml +17 -0
- data/spec/fixtures/basic/digit_space.xml +6 -0
- data/spec/fixtures/basic/double_vertical_bars.xml +10 -0
- data/spec/fixtures/basic/element_over.xml +15 -0
- data/spec/fixtures/basic/element_under.xml +17 -0
- data/spec/fixtures/basic/element_under_over.xml +23 -0
- data/spec/fixtures/basic/enclose_box_matrix.xml +28 -0
- data/spec/fixtures/basic/enclose_left.xml +9 -0
- data/spec/fixtures/basic/enclose_right.xml +8 -0
- data/spec/fixtures/basic/fraction.xml +6 -0
- data/spec/fixtures/basic/greek.xml +30 -0
- data/spec/fixtures/basic/left_right_arrow_accent.xml +12 -0
- data/spec/fixtures/basic/left_subscript.xml +15 -0
- data/spec/fixtures/basic/left_super_sub_script.xml +21 -0
- data/spec/fixtures/basic/left_superscript.xml +15 -0
- data/spec/fixtures/basic/matrix.xml +26 -0
- data/spec/fixtures/basic/matrix_bottom_curly_bracket.xml +32 -0
- data/spec/fixtures/basic/matrix_curly_brackets.xml +30 -0
- data/spec/fixtures/basic/matrix_parenthesis.xml +28 -0
- data/spec/fixtures/basic/matrix_square_brackets.xml +30 -0
- data/spec/fixtures/basic/matrix_top_curly_bracket.xml +32 -0
- data/spec/fixtures/basic/matrix_with_vertical_bar.xml +30 -0
- data/spec/fixtures/basic/n_root.xml +6 -0
- data/spec/fixtures/basic/over_script_with_brace.xml +18 -0
- data/spec/fixtures/basic/parenthesis.xml +9 -0
- data/spec/fixtures/basic/piecewise_function.xml +22 -0
- data/spec/fixtures/basic/square_root.xml +5 -0
- data/spec/fixtures/basic/subscript.xml +13 -0
- data/spec/fixtures/basic/subscript_with_big_operator.xml +10 -0
- data/spec/fixtures/basic/sum_over_under.xml +13 -0
- data/spec/fixtures/basic/sum_super_sub.xml +9 -0
- data/spec/fixtures/basic/super_sub_script.xml +18 -0
- data/spec/fixtures/basic/super_sub_script_big_operator.xml +18 -0
- data/spec/fixtures/basic/superscript.xml +9 -0
- data/spec/fixtures/basic/top_parenthesis.xml +6 -0
- data/spec/fixtures/basic/under_script_with_brace.xml +18 -0
- data/spec/fixtures/basic/vector_accent.xml +13 -0
- data/spec/fixtures/complex/sum_with_nested_matrix.xml +79 -0
- data/spec/lib/mathml2latex/mathml_latex_service_spec.rb +383 -0
- data/spec/lib/mathml2latex/xslt_functions_spec.rb +39 -0
- data/spec/mathml2latex_spec.rb +52 -0
- data/spec/spec_helper.rb +15 -0
- metadata +257 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<?xml version='1.0' encoding="UTF-8"?>
|
|
2
|
+
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
3
|
+
xmlns:m="http://www.w3.org/1998/Math/MathML"
|
|
4
|
+
version='1.0'>
|
|
5
|
+
<xsl:template match="m:mphantom">
|
|
6
|
+
<xsl:text>\phantom{</xsl:text>
|
|
7
|
+
<xsl:apply-templates/>
|
|
8
|
+
<xsl:text>}</xsl:text>
|
|
9
|
+
</xsl:template>
|
|
10
|
+
</xsl:stylesheet>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<?xml version='1.0' encoding="UTF-8"?>
|
|
2
|
+
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
3
|
+
xmlns:m="http://www.w3.org/1998/Math/MathML"
|
|
4
|
+
version='1.0'>
|
|
5
|
+
<xsl:template match="m:mroot">
|
|
6
|
+
<xsl:choose>
|
|
7
|
+
<xsl:when test="count(./*)=2">
|
|
8
|
+
<xsl:text>\sqrt[</xsl:text>
|
|
9
|
+
<xsl:apply-templates select="./*[2]"/>
|
|
10
|
+
<xsl:text>]{</xsl:text>
|
|
11
|
+
<xsl:apply-templates select="./*[1]"/>
|
|
12
|
+
<xsl:text>}</xsl:text>
|
|
13
|
+
</xsl:when>
|
|
14
|
+
<xsl:otherwise>
|
|
15
|
+
<!-- number of argumnets is not 2 - code 25 -->
|
|
16
|
+
<xsl:message>exception 25:</xsl:message>
|
|
17
|
+
<xsl:text>\text{exception 25:}</xsl:text>
|
|
18
|
+
</xsl:otherwise>
|
|
19
|
+
</xsl:choose>
|
|
20
|
+
</xsl:template>
|
|
21
|
+
</xsl:stylesheet>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<?xml version='1.0' encoding="UTF-8"?>
|
|
2
|
+
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
3
|
+
xmlns:m="http://www.w3.org/1998/Math/MathML"
|
|
4
|
+
version='1.0'>
|
|
5
|
+
<xsl:template match="m:mspace">
|
|
6
|
+
<xsl:text>\phantom{\rule</xsl:text>
|
|
7
|
+
<xsl:if test="@depth">
|
|
8
|
+
<xsl:text>[-</xsl:text>
|
|
9
|
+
<xsl:value-of select="@depth"/>
|
|
10
|
+
<xsl:text>]</xsl:text>
|
|
11
|
+
</xsl:if>
|
|
12
|
+
<xsl:text>{</xsl:text>
|
|
13
|
+
<xsl:if test="not(@width)">
|
|
14
|
+
<xsl:text>0ex</xsl:text>
|
|
15
|
+
</xsl:if>
|
|
16
|
+
<xsl:value-of select="@width"/>
|
|
17
|
+
<xsl:text>}{</xsl:text>
|
|
18
|
+
<xsl:if test="not(@height)">
|
|
19
|
+
<xsl:text>0ex</xsl:text>
|
|
20
|
+
</xsl:if>
|
|
21
|
+
<xsl:value-of select="@height"/>
|
|
22
|
+
<xsl:text>}}</xsl:text>
|
|
23
|
+
</xsl:template>
|
|
24
|
+
</xsl:stylesheet>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<?xml version='1.0' encoding="UTF-8"?>
|
|
2
|
+
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
3
|
+
xmlns:m="http://www.w3.org/1998/Math/MathML"
|
|
4
|
+
version='1.0'>
|
|
5
|
+
<xsl:template match="m:msqrt">
|
|
6
|
+
<xsl:text>\sqrt{</xsl:text>
|
|
7
|
+
<xsl:apply-templates/>
|
|
8
|
+
<xsl:text>}</xsl:text>
|
|
9
|
+
</xsl:template>
|
|
10
|
+
</xsl:stylesheet>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<?xml version='1.0' encoding="UTF-8"?>
|
|
2
|
+
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
3
|
+
xmlns:m="http://www.w3.org/1998/Math/MathML"
|
|
4
|
+
version='1.0'>
|
|
5
|
+
<xsl:template match="m:mstyle">
|
|
6
|
+
<xsl:if test="@background">
|
|
7
|
+
<xsl:text>\colorbox[rgb]{</xsl:text>
|
|
8
|
+
<xsl:call-template name="color">
|
|
9
|
+
<xsl:with-param name="color" select="@background"/>
|
|
10
|
+
</xsl:call-template>
|
|
11
|
+
<xsl:text>}{$</xsl:text>
|
|
12
|
+
</xsl:if>
|
|
13
|
+
<xsl:if test="@color">
|
|
14
|
+
<xsl:text>\textcolor[rgb]{</xsl:text>
|
|
15
|
+
<xsl:call-template name="color">
|
|
16
|
+
<xsl:with-param name="color" select="@color"/>
|
|
17
|
+
</xsl:call-template>
|
|
18
|
+
<xsl:text>}{</xsl:text>
|
|
19
|
+
</xsl:if>
|
|
20
|
+
<xsl:choose>
|
|
21
|
+
<xsl:when test="@displaystyle='true'">
|
|
22
|
+
<xsl:text>{\displaystyle</xsl:text>
|
|
23
|
+
</xsl:when>
|
|
24
|
+
<xsl:when test="@displaystyle='false'">
|
|
25
|
+
<xsl:text>{\textstyle</xsl:text>
|
|
26
|
+
</xsl:when>
|
|
27
|
+
</xsl:choose>
|
|
28
|
+
<xsl:apply-templates/>
|
|
29
|
+
<xsl:if test="@displaystyle = 'true' or @displaystyle = 'false'">
|
|
30
|
+
<xsl:text>}</xsl:text>
|
|
31
|
+
</xsl:if>
|
|
32
|
+
<xsl:if test="@color">
|
|
33
|
+
<xsl:text>}</xsl:text>
|
|
34
|
+
</xsl:if>
|
|
35
|
+
<xsl:if test="@background">
|
|
36
|
+
<xsl:text>$}</xsl:text>
|
|
37
|
+
</xsl:if>
|
|
38
|
+
</xsl:template>
|
|
39
|
+
</xsl:stylesheet>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<?xml version='1.0' encoding="UTF-8"?>
|
|
2
|
+
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
3
|
+
xmlns:m="http://www.w3.org/1998/Math/MathML"
|
|
4
|
+
version='1.0'>
|
|
5
|
+
<xsl:template match="m:msub">
|
|
6
|
+
<xsl:text>{</xsl:text>
|
|
7
|
+
<xsl:apply-templates select="./*[1]"/>
|
|
8
|
+
<xsl:text>}_{</xsl:text>
|
|
9
|
+
<xsl:apply-templates select="./*[2]"/>
|
|
10
|
+
<xsl:text>}</xsl:text>
|
|
11
|
+
</xsl:template>
|
|
12
|
+
</xsl:stylesheet>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<?xml version='1.0' encoding="UTF-8"?>
|
|
2
|
+
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
3
|
+
xmlns:m="http://www.w3.org/1998/Math/MathML"
|
|
4
|
+
version='1.0'>
|
|
5
|
+
<xsl:template match="m:msubsup">
|
|
6
|
+
<xsl:text>{</xsl:text>
|
|
7
|
+
<xsl:apply-templates select="./*[1]"/>
|
|
8
|
+
<xsl:text>}_{</xsl:text>
|
|
9
|
+
<xsl:apply-templates select="./*[2]"/>
|
|
10
|
+
<xsl:text>}^{</xsl:text>
|
|
11
|
+
<xsl:apply-templates select="./*[3]"/>
|
|
12
|
+
<xsl:text>}</xsl:text>
|
|
13
|
+
</xsl:template>
|
|
14
|
+
</xsl:stylesheet>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<?xml version='1.0' encoding="UTF-8"?>
|
|
2
|
+
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
3
|
+
xmlns:m="http://www.w3.org/1998/Math/MathML"
|
|
4
|
+
version='1.0'>
|
|
5
|
+
<xsl:template match="m:msup">
|
|
6
|
+
<xsl:text>{</xsl:text>
|
|
7
|
+
<xsl:apply-templates select="./*[1]"/>
|
|
8
|
+
<xsl:text>}^{</xsl:text>
|
|
9
|
+
<xsl:apply-templates select="./*[2]"/>
|
|
10
|
+
<xsl:text>}</xsl:text>
|
|
11
|
+
</xsl:template>
|
|
12
|
+
</xsl:stylesheet>
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<?xml version='1.0' encoding="UTF-8"?>
|
|
2
|
+
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
3
|
+
xmlns:m="http://www.w3.org/1998/Math/MathML"
|
|
4
|
+
version='1.0'>
|
|
5
|
+
<xsl:template match="m:mtable">
|
|
6
|
+
<xsl:text>\begin{array}{</xsl:text>
|
|
7
|
+
<xsl:if test="@frame='solid'">
|
|
8
|
+
<xsl:text>|</xsl:text>
|
|
9
|
+
</xsl:if>
|
|
10
|
+
<xsl:variable name="numbercols" select="count(./m:mtr[1]/m:mtd[not(@columnspan)])+sum(./m:mtr[1]/m:mtd/@columnspan)"/>
|
|
11
|
+
<xsl:choose>
|
|
12
|
+
<xsl:when test="@columnalign">
|
|
13
|
+
<xsl:variable name="colalign">
|
|
14
|
+
<xsl:call-template name="colalign">
|
|
15
|
+
<xsl:with-param name="colalign" select="@columnalign"/>
|
|
16
|
+
</xsl:call-template>
|
|
17
|
+
</xsl:variable>
|
|
18
|
+
<xsl:choose>
|
|
19
|
+
<xsl:when test="string-length($colalign) > $numbercols">
|
|
20
|
+
<xsl:value-of select="substring($colalign,1,$numbercols)"/>
|
|
21
|
+
</xsl:when>
|
|
22
|
+
<xsl:when test="string-length($colalign) < $numbercols">
|
|
23
|
+
<xsl:value-of select="$colalign"/>
|
|
24
|
+
<xsl:call-template name="generate-string">
|
|
25
|
+
<xsl:with-param name="text" select="substring($colalign,string-length($colalign))"/>
|
|
26
|
+
<xsl:with-param name="count" select="$numbercols - string-length($colalign)"/>
|
|
27
|
+
</xsl:call-template>
|
|
28
|
+
</xsl:when>
|
|
29
|
+
<xsl:otherwise>
|
|
30
|
+
<xsl:value-of select="$colalign"/>
|
|
31
|
+
</xsl:otherwise>
|
|
32
|
+
</xsl:choose>
|
|
33
|
+
</xsl:when>
|
|
34
|
+
<xsl:otherwise>
|
|
35
|
+
<xsl:call-template name="generate-string">
|
|
36
|
+
<xsl:with-param name="text" select="'c'"/>
|
|
37
|
+
<xsl:with-param name="count" select="$numbercols"/>
|
|
38
|
+
</xsl:call-template>
|
|
39
|
+
</xsl:otherwise>
|
|
40
|
+
</xsl:choose>
|
|
41
|
+
<xsl:if test="@frame='solid'">
|
|
42
|
+
<xsl:text>|</xsl:text>
|
|
43
|
+
</xsl:if>
|
|
44
|
+
<xsl:text>}</xsl:text>
|
|
45
|
+
<xsl:if test="@frame='solid'">
|
|
46
|
+
<xsl:text>\hline </xsl:text>
|
|
47
|
+
</xsl:if>
|
|
48
|
+
<xsl:apply-templates/>
|
|
49
|
+
<xsl:if test="@frame='solid'">
|
|
50
|
+
<xsl:text>\\ \hline</xsl:text>
|
|
51
|
+
</xsl:if>
|
|
52
|
+
<xsl:text>\end{array}</xsl:text>
|
|
53
|
+
</xsl:template>
|
|
54
|
+
|
|
55
|
+
<xsl:template name="colalign">
|
|
56
|
+
<xsl:param name="colalign"/>
|
|
57
|
+
<xsl:choose>
|
|
58
|
+
<xsl:when test="contains($colalign,' ')">
|
|
59
|
+
<xsl:value-of select="substring($colalign,1,1)"/>
|
|
60
|
+
<xsl:call-template name="colalign">
|
|
61
|
+
<xsl:with-param name="colalign" select="substring-after($colalign,' ')"/>
|
|
62
|
+
</xsl:call-template>
|
|
63
|
+
</xsl:when>
|
|
64
|
+
<xsl:otherwise>
|
|
65
|
+
<xsl:value-of select="substring($colalign,1,1)"/>
|
|
66
|
+
</xsl:otherwise>
|
|
67
|
+
</xsl:choose>
|
|
68
|
+
</xsl:template>
|
|
69
|
+
|
|
70
|
+
<xsl:template name="generate-string">
|
|
71
|
+
<!-- template from XSLT Standard Library v1.1 -->
|
|
72
|
+
<xsl:param name="text"/>
|
|
73
|
+
<xsl:param name="count"/>
|
|
74
|
+
|
|
75
|
+
<xsl:choose>
|
|
76
|
+
<xsl:when test="string-length($text) = 0 or $count <= 0"/>
|
|
77
|
+
<xsl:otherwise>
|
|
78
|
+
<xsl:value-of select="$text"/>
|
|
79
|
+
<xsl:call-template name="generate-string">
|
|
80
|
+
<xsl:with-param name="text" select="$text"/>
|
|
81
|
+
<xsl:with-param name="count" select="$count - 1"/>
|
|
82
|
+
</xsl:call-template>
|
|
83
|
+
</xsl:otherwise>
|
|
84
|
+
</xsl:choose>
|
|
85
|
+
</xsl:template>
|
|
86
|
+
</xsl:stylesheet>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
<?xml version='1.0' encoding="UTF-8"?>
|
|
2
|
+
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
3
|
+
xmlns:m="http://www.w3.org/1998/Math/MathML"
|
|
4
|
+
version='1.0'>
|
|
5
|
+
<xsl:template match="m:mtd[@columnspan]">
|
|
6
|
+
<xsl:text>\multicolumn{</xsl:text>
|
|
7
|
+
<xsl:value-of select="@columnspan"/>
|
|
8
|
+
<xsl:text>}{c}{</xsl:text>
|
|
9
|
+
<xsl:apply-templates/>
|
|
10
|
+
<xsl:text>}</xsl:text>
|
|
11
|
+
<xsl:if test="count(following-sibling::*)>0">
|
|
12
|
+
<xsl:text>& </xsl:text>
|
|
13
|
+
</xsl:if>
|
|
14
|
+
</xsl:template>
|
|
15
|
+
|
|
16
|
+
<xsl:template match="m:mtd">
|
|
17
|
+
<xsl:if test="@columnalign='right' or @columnalign='center'">
|
|
18
|
+
<xsl:text>\hfill </xsl:text>
|
|
19
|
+
</xsl:if>
|
|
20
|
+
<xsl:apply-templates/>
|
|
21
|
+
<xsl:if test="@columnalign='left' or @columnalign='center'">
|
|
22
|
+
<xsl:text>\hfill </xsl:text>
|
|
23
|
+
</xsl:if>
|
|
24
|
+
<xsl:if test="count(following-sibling::*)>0">
|
|
25
|
+
<!-- this test valid for Sablotron, another form - test="not(position()=last())".
|
|
26
|
+
Also for m:mtd[@columnspan] and m:mtr -->
|
|
27
|
+
<xsl:text>& </xsl:text>
|
|
28
|
+
</xsl:if>
|
|
29
|
+
</xsl:template>
|
|
30
|
+
</xsl:stylesheet>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<?xml version='1.0' encoding="UTF-8"?>
|
|
2
|
+
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
3
|
+
xmlns:m="http://www.w3.org/1998/Math/MathML"
|
|
4
|
+
version='1.0'>
|
|
5
|
+
<xsl:template match="m:mtr">
|
|
6
|
+
<xsl:apply-templates/>
|
|
7
|
+
<xsl:if test="count(following-sibling::*)>0">
|
|
8
|
+
<xsl:text>\\ </xsl:text>
|
|
9
|
+
</xsl:if>
|
|
10
|
+
</xsl:template>
|
|
11
|
+
</xsl:stylesheet>
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
<?xml version='1.0' encoding="UTF-8"?>
|
|
2
|
+
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
3
|
+
xmlns:m="http://www.w3.org/1998/Math/MathML"
|
|
4
|
+
xmlns:inst="http://instructure.com/functions"
|
|
5
|
+
extension-element-prefixes="inst"
|
|
6
|
+
version='1.0'>
|
|
7
|
+
<xsl:template match="m:munder">
|
|
8
|
+
<xsl:call-template name="munder">
|
|
9
|
+
<xsl:with-param name="base">
|
|
10
|
+
<xsl:call-template name="startspace">
|
|
11
|
+
<xsl:with-param name="symbol" select="./*[1]"/>
|
|
12
|
+
</xsl:call-template>
|
|
13
|
+
</xsl:with-param>
|
|
14
|
+
<xsl:with-param name="under">
|
|
15
|
+
<xsl:call-template name="startspace">
|
|
16
|
+
<xsl:with-param name="symbol" select="./*[2]"/>
|
|
17
|
+
</xsl:call-template>
|
|
18
|
+
</xsl:with-param>
|
|
19
|
+
</xsl:call-template>
|
|
20
|
+
</xsl:template>
|
|
21
|
+
|
|
22
|
+
<xsl:template name="munder">
|
|
23
|
+
<xsl:param name="base"/>
|
|
24
|
+
<xsl:param name="under"/>
|
|
25
|
+
|
|
26
|
+
<xsl:variable name="diacritics-regex" select="'^[̀-̸⃐-⃯]$'" />
|
|
27
|
+
<xsl:variable name="is-diacritical-mark" select="inst:matches($under, $diacritics-regex)" />
|
|
28
|
+
|
|
29
|
+
<!-- original: scripts.xsl line 128 -->
|
|
30
|
+
<!-- modified based on: mml2tex.xsl line 312 -->
|
|
31
|
+
<xsl:choose>
|
|
32
|
+
<xsl:when test="translate($base,'∏∐⋂⋃⊔',
|
|
33
|
+
'∑∑∑∑∑')='∑'">
|
|
34
|
+
<!-- if $base is operator, such as
|
|
35
|
+
∑ /sum L: summation operator
|
|
36
|
+
∏ /prod L: product operator
|
|
37
|
+
∐ /coprod L: coproduct operator
|
|
38
|
+
⋂ /bigcap
|
|
39
|
+
⋃ /bigcup
|
|
40
|
+
⊔ /bigsqcup
|
|
41
|
+
-->
|
|
42
|
+
<xsl:apply-templates select="./*[1]"/>
|
|
43
|
+
<xsl:text>_{</xsl:text>
|
|
44
|
+
<xsl:apply-templates select="./*[2]"/>
|
|
45
|
+
<xsl:text>}</xsl:text>
|
|
46
|
+
</xsl:when>
|
|
47
|
+
<xsl:otherwise>
|
|
48
|
+
<xsl:choose>
|
|
49
|
+
<xsl:when test="$under = '⏞' or $under = '⏟'">
|
|
50
|
+
<xsl:text>\underbrace</xsl:text>
|
|
51
|
+
</xsl:when>
|
|
52
|
+
<xsl:when test="$under = '⎴' or $under = '⎵'">
|
|
53
|
+
<xsl:text>\underbracket</xsl:text>
|
|
54
|
+
</xsl:when>
|
|
55
|
+
<xsl:when test="inst:matches($under, '^[¯_̄̅‾]$')"><!-- macron, combining macron, combining overline -->
|
|
56
|
+
<xsl:text>\underline</xsl:text>
|
|
57
|
+
</xsl:when>
|
|
58
|
+
<xsl:when test="$is-diacritical-mark">
|
|
59
|
+
<xsl:apply-templates select="./*[2]"/>
|
|
60
|
+
</xsl:when>
|
|
61
|
+
<xsl:otherwise>
|
|
62
|
+
<xsl:text>\underset{</xsl:text>
|
|
63
|
+
<xsl:apply-templates select="./*[2]"/>
|
|
64
|
+
<xsl:text>}</xsl:text>
|
|
65
|
+
</xsl:otherwise>
|
|
66
|
+
</xsl:choose>
|
|
67
|
+
<xsl:text>{</xsl:text>
|
|
68
|
+
<xsl:apply-templates select="./*[1]"/>
|
|
69
|
+
<xsl:text>}</xsl:text>
|
|
70
|
+
</xsl:otherwise>
|
|
71
|
+
</xsl:choose>
|
|
72
|
+
</xsl:template>
|
|
73
|
+
</xsl:stylesheet>
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
<?xml version='1.0' encoding="UTF-8"?>
|
|
2
|
+
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
3
|
+
xmlns:m="http://www.w3.org/1998/Math/MathML"
|
|
4
|
+
version='1.0'>
|
|
5
|
+
<xsl:template match="m:munderover">
|
|
6
|
+
<xsl:call-template name="munderover">
|
|
7
|
+
<xsl:with-param name="base">
|
|
8
|
+
<xsl:call-template name="startspace">
|
|
9
|
+
<xsl:with-param name="symbol" select="./*[1]"/>
|
|
10
|
+
</xsl:call-template>
|
|
11
|
+
</xsl:with-param>
|
|
12
|
+
<xsl:with-param name="under">
|
|
13
|
+
<xsl:call-template name="startspace">
|
|
14
|
+
<xsl:with-param name="symbol" select="./*[2]"/>
|
|
15
|
+
</xsl:call-template>
|
|
16
|
+
</xsl:with-param>
|
|
17
|
+
<xsl:with-param name="over">
|
|
18
|
+
<xsl:call-template name="startspace">
|
|
19
|
+
<xsl:with-param name="symbol" select="./*[3]"/>
|
|
20
|
+
</xsl:call-template>
|
|
21
|
+
</xsl:with-param>
|
|
22
|
+
</xsl:call-template>
|
|
23
|
+
</xsl:template>
|
|
24
|
+
|
|
25
|
+
<xsl:template name="munderover">
|
|
26
|
+
<xsl:param name="base"/>
|
|
27
|
+
<xsl:param name="under"/>
|
|
28
|
+
<xsl:param name="over"/>
|
|
29
|
+
<xsl:choose>
|
|
30
|
+
<xsl:when test="$over='¯'"> <!-- OverBar - over bar -->
|
|
31
|
+
<xsl:text>\overline{</xsl:text>
|
|
32
|
+
<xsl:call-template name="munder">
|
|
33
|
+
<xsl:with-param name="base" select="$base"/>
|
|
34
|
+
<xsl:with-param name="under" select="$under"/>
|
|
35
|
+
</xsl:call-template>
|
|
36
|
+
<xsl:text>}</xsl:text>
|
|
37
|
+
</xsl:when>
|
|
38
|
+
<xsl:when test="$over='︷'"> <!-- OverBrace - over brace -->
|
|
39
|
+
<xsl:text>\overbrace{</xsl:text>
|
|
40
|
+
<xsl:call-template name="munder">
|
|
41
|
+
<xsl:with-param name="base" select="$base"/>
|
|
42
|
+
<xsl:with-param name="under" select="$under"/>
|
|
43
|
+
</xsl:call-template>
|
|
44
|
+
<xsl:text>}</xsl:text>
|
|
45
|
+
</xsl:when>
|
|
46
|
+
<xsl:when test="$under='̲'"> <!-- UnderBar - combining low line -->
|
|
47
|
+
<xsl:text>\underline{</xsl:text>
|
|
48
|
+
<xsl:call-template name="mover">
|
|
49
|
+
<xsl:with-param name="base" select="$base"/>
|
|
50
|
+
<xsl:with-param name="over" select="$over"/>
|
|
51
|
+
<xsl:with-param name="pos_over" select="3"/>
|
|
52
|
+
</xsl:call-template>
|
|
53
|
+
<xsl:text>}</xsl:text>
|
|
54
|
+
</xsl:when>
|
|
55
|
+
<xsl:when test="$under='︸'"> <!-- UnderBrace - under brace -->
|
|
56
|
+
<xsl:text>\underbrace{</xsl:text>
|
|
57
|
+
<xsl:call-template name="mover">
|
|
58
|
+
<xsl:with-param name="base" select="$base"/>
|
|
59
|
+
<xsl:with-param name="over" select="$over"/>
|
|
60
|
+
<xsl:with-param name="pos_over" select="3"/>
|
|
61
|
+
</xsl:call-template>
|
|
62
|
+
<xsl:text>}</xsl:text>
|
|
63
|
+
</xsl:when>
|
|
64
|
+
<xsl:when test="translate($base,'∏∐⋂⋃⊔',
|
|
65
|
+
'∑∑∑∑∑')='∑'">
|
|
66
|
+
<!-- if $base is operator, such as
|
|
67
|
+
∑ /sum L: summation operator
|
|
68
|
+
∏ /prod L: product operator
|
|
69
|
+
∐ /coprod L: coproduct operator
|
|
70
|
+
⋂ /bigcap
|
|
71
|
+
⋃ /bigcup
|
|
72
|
+
⊔ /bigsqcup
|
|
73
|
+
-->
|
|
74
|
+
<xsl:apply-templates select="./*[1]"/>
|
|
75
|
+
<xsl:text>_{</xsl:text>
|
|
76
|
+
<xsl:apply-templates select="./*[2]"/>
|
|
77
|
+
<xsl:text>}^{</xsl:text>
|
|
78
|
+
<xsl:apply-templates select="./*[3]"/>
|
|
79
|
+
<xsl:text>}</xsl:text>
|
|
80
|
+
</xsl:when>
|
|
81
|
+
<xsl:otherwise>
|
|
82
|
+
<xsl:text>\underset{</xsl:text>
|
|
83
|
+
<xsl:apply-templates select="./*[2]"/>
|
|
84
|
+
<xsl:text>}{\overset{</xsl:text>
|
|
85
|
+
<xsl:apply-templates select="./*[3]"/>
|
|
86
|
+
<xsl:text>}{</xsl:text>
|
|
87
|
+
<xsl:apply-templates select="./*[1]"/>
|
|
88
|
+
<xsl:text>}}</xsl:text>
|
|
89
|
+
</xsl:otherwise>
|
|
90
|
+
</xsl:choose>
|
|
91
|
+
</xsl:template>
|
|
92
|
+
</xsl:stylesheet>
|