1 <?xml version='1.0' encoding="UTF-8"?>
\r
3 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
\r
4 xmlns:m="http://www.w3.org/1998/Math/MathML"
\r
7 <!-- ====================================================================== -->
\r
8 <!-- $Id: cmarkup.xsl 149 2006-09-12 21:23:53Z fletcher $
\r
9 This file is part of the XSLT MathML Library distribution.
\r
10 See ./README or http://www.raleigh.ru/MathML/mmltex for
\r
11 copyright and other information
\r
12 Modified by Fletcher T. Penney for MultiMarkdown Version 2.0.a -->
\r
13 <!-- ====================================================================== -->
\r
16 <xsl:template match="m:cn"><xsl:apply-templates/></xsl:template>
\r
18 <xsl:template match="m:cn[@type='complex-cartesian']">
\r
19 <xsl:apply-templates select="text()[1]"/>
\r
20 <xsl:text>+</xsl:text>
\r
21 <xsl:apply-templates select="text()[2]"/>
\r
22 <xsl:text>i</xsl:text>
\r
25 <xsl:template match="m:cn[@type='rational']">
\r
26 <xsl:apply-templates select="text()[1]"/>
\r
27 <xsl:text>/</xsl:text>
\r
28 <xsl:apply-templates select="text()[2]"/>
\r
31 <xsl:template match="m:cn[@type='integer' and @base!=10]">
\r
32 <xsl:apply-templates/>
\r
33 <xsl:text>_{</xsl:text><xsl:value-of select="@base"/><xsl:text>}</xsl:text>
\r
36 <xsl:template match="m:cn[@type='complex-polar']">
\r
37 <xsl:apply-templates select="text()[1]"/>
\r
38 <xsl:text>e^{i </xsl:text>
\r
39 <xsl:apply-templates select="text()[2]"/>
\r
40 <xsl:text>}</xsl:text>
\r
43 <xsl:template match="m:cn[@type='e-notation']">
\r
44 <xsl:apply-templates select="text()[1]"/>
\r
45 <xsl:text>E</xsl:text>
\r
46 <xsl:apply-templates select="text()[2]"/>
\r
49 <!-- 4.4.1.1 ci 4.4.1.2 csymbol -->
\r
50 <xsl:template match="m:ci | m:csymbol">
\r
52 <xsl:when test="string-length(normalize-space(text()))>1">
\r
53 <xsl:text>\mathrm{</xsl:text><xsl:apply-templates/><xsl:text>}</xsl:text>
\r
55 <xsl:otherwise><xsl:apply-templates/></xsl:otherwise>
\r
59 <!-- 4.4.2.1 apply 4.4.2.2 reln -->
\r
60 <xsl:template match="m:apply | m:reln">
\r
61 <xsl:apply-templates select="*[1]">
\r
63 <xsl:with-param name="p" select="10"/>
\r
64 </xsl:apply-templates>
\r
66 <xsl:text>(</xsl:text>
\r
67 <xsl:for-each select="*[position()>1]">
\r
68 <xsl:apply-templates select="."/>
\r
69 <xsl:if test="not(position()=last())"><xsl:text>, </xsl:text></xsl:if>
\r
71 <xsl:text>)</xsl:text>
\r
75 <xsl:template match="m:fn[m:apply[1]]"> <!-- for m:fn using default rule -->
\r
76 <xsl:text>(</xsl:text><xsl:apply-templates/><xsl:text>)</xsl:text>
\r
79 <!-- 4.4.2.4 interval -->
\r
80 <xsl:template match="m:interval[*[2]]">
\r
82 <xsl:when test="@closure='open' or @closure='open-closed'">
\r
83 <xsl:text>\left(</xsl:text>
\r
85 <xsl:otherwise><xsl:text>\left[</xsl:text></xsl:otherwise>
\r
87 <xsl:apply-templates select="*[1]"/>
\r
88 <xsl:text> , </xsl:text>
\r
89 <xsl:apply-templates select="*[2]"/>
\r
91 <xsl:when test="@closure='open' or @closure='closed-open'">
\r
92 <xsl:text>\right)</xsl:text>
\r
94 <xsl:otherwise><xsl:text>\right]</xsl:text></xsl:otherwise>
\r
98 <xsl:template match="m:interval">
\r
99 <xsl:text>\left\{</xsl:text><xsl:apply-templates/><xsl:text>\right\}</xsl:text>
\r
102 <!-- 4.4.2.5 inverse -->
\r
103 <xsl:template match="m:apply[*[1][self::m:inverse]]">
\r
104 <xsl:apply-templates select="*[2]"/><xsl:text>^{(-1)}</xsl:text>
\r
107 <!-- 4.4.2.6 sep 4.4.2.7 condition -->
\r
108 <xsl:template match="m:sep | m:condition"><xsl:apply-templates/></xsl:template>
\r
110 <!-- 4.4.2.9 lambda -->
\r
111 <xsl:template match="m:lambda">
\r
112 <xsl:apply-templates select="m:bvar/*"/>
\r
113 <xsl:text>\mapsto </xsl:text>
\r
114 <xsl:apply-templates select="*[last()]"/>
\r
115 <!-- Other variant
\r
116 <xsl:text>\mathrm{lambda}\: </xsl:text>
\r
117 <xsl:apply-templates select="m:bvar/*"/>
\r
118 <xsl:text>.\: </xsl:text>
\r
119 <xsl:apply-templates select="*[last()]"/> -->
\r
122 <!-- 4.4.2.10 compose -->
\r
123 <xsl:template match="m:apply[*[1][self::m:compose]]">
\r
124 <xsl:param name="p" select="0"/>
\r
125 <xsl:call-template name="infix">
\r
126 <xsl:with-param name="this-p" select="1"/>
\r
127 <xsl:with-param name="p" select="$p"/>
\r
128 <xsl:with-param name="mo">\circ </xsl:with-param>
\r
129 </xsl:call-template>
\r
132 <!-- 4.4.2.11 ident -->
\r
133 <xsl:template match="m:ident"><xsl:text>\mathrm{id}</xsl:text></xsl:template>
\r
135 <!-- 4.4.2.12 domain 4.4.2.13 codomain 4.4.2.14 image 4.4.3.21 arg 4.4.3.24 lcm
\r
136 4.4.5.9 grad 4.4.5.10 curl 4.4.9.4 median 4.4.9.5 mode-->
\r
137 <xsl:template match="m:domain | m:codomain | m:image | m:arg | m:lcm | m:grad |
\r
138 m:curl | m:median | m:mode">
\r
139 <xsl:text>\mathop{\mathrm{</xsl:text>
\r
140 <xsl:value-of select="local-name()"/>
\r
141 <xsl:text>}}</xsl:text>
\r
144 <!-- 4.4.2.15 domainofapplication -->
\r
145 <xsl:template match="m:domainofapplication"/>
\r
147 <!-- 4.4.2.16 piecewise -->
\r
148 <xsl:template match="m:piecewise">
\r
149 <xsl:text>\begin{cases}</xsl:text>
\r
150 <xsl:apply-templates select="m:piece"/>
\r
151 <xsl:apply-templates select="m:otherwise"/>
\r
152 <xsl:text>\end{cases}</xsl:text>
\r
155 <xsl:template match="m:piece">
\r
156 <xsl:apply-templates select="*[1]"/>
\r
157 <xsl:text> & \text{if $</xsl:text>
\r
158 <xsl:apply-templates select="*[2]"/>
\r
159 <xsl:text>$}</xsl:text>
\r
160 <xsl:if test="not(position()=last()) or ../m:otherwise"><xsl:text>\\ </xsl:text></xsl:if>
\r
163 <xsl:template match="m:otherwise">
\r
164 <xsl:apply-templates select="*[1]"/>
\r
165 <xsl:text> & \text{otherwise}</xsl:text>
\r
168 <!-- 4.4.3.1 quotient -->
\r
169 <xsl:template match="m:apply[*[1][self::m:quotient]]">
\r
170 <xsl:text>\left\lfloor\frac{</xsl:text>
\r
171 <xsl:apply-templates select="*[2]"/>
\r
172 <xsl:text>}{</xsl:text>
\r
173 <xsl:apply-templates select="*[3]"/>
\r
174 <xsl:text>}\right\rfloor </xsl:text>
\r
177 <!-- 4.4.3.2 factorial -->
\r
178 <xsl:template match="m:apply[*[1][self::m:factorial]]">
\r
179 <xsl:apply-templates select="*[2]">
\r
180 <xsl:with-param name="p" select="7"/>
\r
181 </xsl:apply-templates>
\r
182 <xsl:text>!</xsl:text>
\r
185 <!-- 4.4.3.3 divide -->
\r
186 <xsl:template match="m:apply[*[1][self::m:divide]]">
\r
187 <xsl:param name="p" select="0"/>
\r
188 <xsl:param name="this-p" select="3"/>
\r
189 <xsl:if test="$this-p < $p"><xsl:text>\left(</xsl:text></xsl:if>
\r
190 <xsl:text>\frac{</xsl:text>
\r
191 <xsl:apply-templates select="*[2]"/>
\r
192 <!-- <xsl:with-param name="p" select="$this-p"/>
\r
193 </xsl:apply-templates>-->
\r
194 <xsl:text>}{</xsl:text>
\r
195 <xsl:apply-templates select="*[3]"/>
\r
196 <!-- <xsl:with-param name="p" select="$this-p"/>
\r
197 </xsl:apply-templates>-->
\r
198 <xsl:text>}</xsl:text>
\r
199 <xsl:if test="$this-p < $p"><xsl:text>\right)</xsl:text></xsl:if>
\r
202 <!-- 4.4.3.4 max min -->
\r
203 <xsl:template match="m:apply[*[1][self::m:max or self::m:min]]">
\r
204 <xsl:text>\</xsl:text>
\r
205 <xsl:value-of select="local-name(*[1])"/>
\r
206 <xsl:text>\{</xsl:text>
\r
208 <xsl:when test="m:condition">
\r
209 <xsl:apply-templates select="*[last()]"/>
\r
210 <xsl:text>\mid </xsl:text>
\r
211 <xsl:apply-templates select="m:condition/node()"/>
\r
214 <xsl:for-each select="*[position() > 1]">
\r
215 <xsl:apply-templates select="."/>
\r
216 <xsl:if test="position() !=last()"><xsl:text> , </xsl:text></xsl:if>
\r
220 <xsl:text>\}</xsl:text>
\r
223 <!-- 4.4.3.5 minus-->
\r
224 <xsl:template match="m:apply[*[1][self::m:minus] and count(*)=2]">
\r
225 <xsl:text>-</xsl:text>
\r
226 <xsl:apply-templates select="*[2]">
\r
227 <xsl:with-param name="p" select="5"/>
\r
228 </xsl:apply-templates>
\r
231 <xsl:template match="m:apply[*[1][self::m:minus] and count(*)>2]">
\r
232 <xsl:param name="p" select="0"/>
\r
233 <xsl:call-template name="binary">
\r
234 <xsl:with-param name="mo">-</xsl:with-param>
\r
235 <xsl:with-param name="p" select="$p"/>
\r
236 <xsl:with-param name="this-p" select="2"/>
\r
237 </xsl:call-template>
\r
240 <!-- 4.4.3.6 plus-->
\r
241 <xsl:template match="m:apply[*[1][self::m:plus]]">
\r
242 <xsl:param name="p" select="0"/>
\r
243 <xsl:if test="$p > 2">
\r
244 <xsl:text>(</xsl:text>
\r
246 <xsl:for-each select="*[position()>1]">
\r
247 <xsl:if test="position() > 1">
\r
249 <xsl:when test="self::m:apply[*[1][self::m:times] and
\r
250 *[2][self::m:apply/*[1][self::m:minus] or self::m:cn[not(m:sep) and
\r
251 (number(.) < 0)]]]">-</xsl:when>
\r
252 <xsl:otherwise>+</xsl:otherwise>
\r
256 <xsl:when test="self::m:apply[*[1][self::m:times] and
\r
257 *[2][self::m:cn[not(m:sep) and (number(.) <0)]]]">
\r
258 <xsl:value-of select="-(*[2])"/>
\r
259 <xsl:apply-templates select=".">
\r
260 <xsl:with-param name="first" select="2"/>
\r
261 <xsl:with-param name="p" select="2"/>
\r
262 </xsl:apply-templates>
\r
264 <xsl:when test="self::m:apply[*[1][self::m:times] and
\r
265 *[2][self::m:apply/*[1][self::m:minus]]]">
\r
266 <xsl:apply-templates select="./*[2]/*[2]"/>
\r
267 <xsl:apply-templates select=".">
\r
268 <xsl:with-param name="first" select="2"/>
\r
269 <xsl:with-param name="p" select="2"/>
\r
270 </xsl:apply-templates>
\r
273 <xsl:apply-templates select=".">
\r
274 <xsl:with-param name="p" select="2"/>
\r
275 </xsl:apply-templates>
\r
279 <xsl:if test="$p > 2">
\r
280 <xsl:text>)</xsl:text>
\r
284 <!-- 4.4.3.7 power -->
\r
285 <xsl:template match="m:apply[*[1][self::m:power]]">
\r
286 <xsl:apply-templates select="*[2]">
\r
287 <xsl:with-param name="p" select="5"/>
\r
288 </xsl:apply-templates>
\r
289 <xsl:text>^{</xsl:text>
\r
290 <xsl:apply-templates select="*[3]">
\r
291 <xsl:with-param name="p" select="5"/>
\r
292 </xsl:apply-templates>
\r
293 <xsl:text>}</xsl:text>
\r
296 <!-- 4.4.3.8 remainder -->
\r
297 <xsl:template match="m:apply[*[1][self::m:rem]]">
\r
298 <xsl:param name="p" select="0"/>
\r
299 <xsl:call-template name="binary">
\r
300 <xsl:with-param name="mo">\mod </xsl:with-param>
\r
301 <xsl:with-param name="p" select="$p"/>
\r
302 <xsl:with-param name="this-p" select="3"/>
\r
303 </xsl:call-template>
\r
306 <!-- 4.4.3.9 times-->
\r
307 <xsl:template match="m:apply[*[1][self::m:times]]" name="times">
\r
308 <xsl:param name="p" select="0"/>
\r
309 <xsl:param name="first" select="1"/>
\r
310 <xsl:if test="$p > 3"><xsl:text>(</xsl:text></xsl:if>
\r
311 <xsl:for-each select="*[position()>1]">
\r
312 <xsl:if test="position() > 1">
\r
314 <xsl:when test="self::m:cn">\times <!-- times --></xsl:when>
\r
315 <xsl:otherwise><!--invisible times--></xsl:otherwise>
\r
318 <xsl:if test="position()>= $first">
\r
319 <xsl:apply-templates select=".">
\r
320 <xsl:with-param name="p" select="3"/>
\r
321 </xsl:apply-templates>
\r
324 <xsl:if test="$p > 3"><xsl:text>)</xsl:text></xsl:if>
\r
327 <!-- 4.4.3.10 root -->
\r
328 <xsl:template match="m:apply[*[1][self::m:root]]">
\r
329 <xsl:text>\sqrt</xsl:text>
\r
330 <xsl:if test="m:degree!=2">
\r
331 <xsl:text>[</xsl:text>
\r
332 <xsl:apply-templates select="m:degree/*"/>
\r
333 <xsl:text>]</xsl:text>
\r
335 <xsl:text>{</xsl:text>
\r
336 <xsl:apply-templates select="*[position()>1 and not(self::m:degree)]"/>
\r
337 <xsl:text>}</xsl:text>
\r
340 <!-- 4.4.3.11 gcd -->
\r
341 <xsl:template match="m:gcd"><xsl:text>\gcd </xsl:text></xsl:template>
\r
343 <!-- 4.4.3.12 and -->
\r
344 <xsl:template match="m:apply[*[1][self::m:and]]">
\r
345 <xsl:param name="p" select="0"/>
\r
346 <xsl:call-template name="infix">
\r
347 <xsl:with-param name="this-p" select="2"/>
\r
348 <xsl:with-param name="p" select="$p"/>
\r
349 <xsl:with-param name="mo">\land <!-- and --></xsl:with-param>
\r
350 </xsl:call-template>
\r
353 <!-- 4.4.3.13 or -->
\r
354 <xsl:template match="m:apply[*[1][self::m:or]]">
\r
355 <xsl:param name="p" select="0"/>
\r
356 <xsl:call-template name="infix">
\r
357 <xsl:with-param name="this-p" select="3"/>
\r
358 <xsl:with-param name="p" select="$p"/>
\r
359 <xsl:with-param name="mo">\lor </xsl:with-param>
\r
360 </xsl:call-template>
\r
363 <!-- 4.4.3.14 xor -->
\r
364 <xsl:template match="m:apply[*[1][self::m:xor]]">
\r
365 <xsl:param name="p" select="0"/>
\r
366 <xsl:call-template name="infix">
\r
367 <xsl:with-param name="this-p" select="3"/>
\r
368 <xsl:with-param name="p" select="$p"/>
\r
369 <xsl:with-param name="mo">\mathop{\mathrm{xor}}</xsl:with-param>
\r
370 </xsl:call-template>
\r
373 <!-- 4.4.3.15 not -->
\r
374 <xsl:template match="m:apply[*[1][self::m:not]]">
\r
375 <xsl:text>\neg </xsl:text>
\r
376 <xsl:apply-templates select="*[2]">
\r
377 <xsl:with-param name="p" select="7"/>
\r
378 </xsl:apply-templates>
\r
381 <!-- 4.4.3.16 implies -->
\r
382 <xsl:template match="m:apply[*[1][self::m:implies]] | m:reln[*[1][self::m:implies]]">
\r
383 <xsl:param name="p" select="0"/>
\r
384 <xsl:call-template name="binary">
\r
385 <xsl:with-param name="mo">\implies </xsl:with-param>
\r
386 <xsl:with-param name="p" select="$p"/>
\r
387 <xsl:with-param name="this-p" select="3"/>
\r
388 </xsl:call-template>
\r
391 <!-- 4.4.3.17 forall 4.4.3.18 exists -->
\r
392 <xsl:template match="m:apply[*[1][self::m:forall or self::m:exists]]">
\r
393 <xsl:text>\</xsl:text>
\r
394 <xsl:value-of select="local-name(*[1])"/>
\r
395 <xsl:text> </xsl:text>
\r
396 <xsl:apply-templates select="m:bvar"/>
\r
397 <xsl:if test="m:condition">
\r
398 <xsl:text>, </xsl:text><xsl:apply-templates select="m:condition"/>
\r
400 <xsl:if test="*[last()][local-name()!='condition'][local-name()!='bvar']">
\r
401 <xsl:text>\colon </xsl:text>
\r
402 <xsl:apply-templates select="*[last()]"/>
\r
406 <!-- 4.4.3.19 abs -->
\r
407 <xsl:template match="m:apply[*[1][self::m:abs]]">
\r
408 <xsl:text>\left|</xsl:text>
\r
409 <xsl:apply-templates select="*[2]"/>
\r
410 <xsl:text>\right|</xsl:text>
\r
413 <!-- 4.4.3.20 conjugate -->
\r
414 <xsl:template match="m:apply[*[1][self::m:conjugate]]">
\r
415 <xsl:text>\overline{</xsl:text><xsl:apply-templates select="*[2]"/><xsl:text>}</xsl:text>
\r
418 <!-- 4.4.3.22 real -->
\r
419 <xsl:template match="m:real"><xsl:text>\Re </xsl:text></xsl:template>
\r
421 <!-- 4.4.3.23 imaginary -->
\r
422 <xsl:template match="m:imaginary"><xsl:text>\Im </xsl:text></xsl:template>
\r
424 <!-- 4.4.3.25 floor -->
\r
425 <xsl:template match="m:apply[*[1][self::m:floor]]">
\r
426 <xsl:text>\lfloor </xsl:text>
\r
427 <xsl:apply-templates select="*[2]"/>
\r
428 <xsl:text>\rfloor </xsl:text>
\r
431 <!-- 4.4.3.25 ceiling -->
\r
432 <xsl:template match="m:apply[*[1][self::m:ceiling]]">
\r
433 <xsl:text>\lceil </xsl:text>
\r
434 <xsl:apply-templates select="*[2]"/>
\r
435 <xsl:text>\rceil </xsl:text>
\r
438 <!-- 4.4.4.1 eq -->
\r
439 <xsl:template match="m:apply[*[1][self::m:eq]] | m:reln[*[1][self::m:eq]]">
\r
440 <xsl:param name="p" select="0"/>
\r
441 <xsl:call-template name="infix">
\r
442 <xsl:with-param name="this-p" select="1"/>
\r
443 <xsl:with-param name="p" select="$p"/>
\r
444 <xsl:with-param name="mo">=</xsl:with-param>
\r
445 </xsl:call-template>
\r
448 <!-- 4.4.4.2 neq -->
\r
449 <xsl:template match="m:apply[*[1][self::m:neq]] | m:reln[*[1][self::m:neq]]">
\r
450 <xsl:param name="p" select="0"/>
\r
451 <xsl:call-template name="infix">
\r
452 <xsl:with-param name="this-p" select="1"/>
\r
453 <xsl:with-param name="p" select="$p"/>
\r
454 <xsl:with-param name="mo">\neq </xsl:with-param>
\r
455 </xsl:call-template>
\r
458 <!-- 4.4.4.3 gt -->
\r
459 <xsl:template match="m:apply[*[1][self::m:gt]] | m:reln[*[1][self::m:gt]]">
\r
460 <xsl:param name="p" select="0"/>
\r
461 <xsl:call-template name="infix">
\r
462 <xsl:with-param name="this-p" select="1"/>
\r
463 <xsl:with-param name="p" select="$p"/>
\r
464 <xsl:with-param name="mo">> </xsl:with-param>
\r
465 </xsl:call-template>
\r
468 <!-- 4.4.4.4 lt -->
\r
469 <xsl:template match="m:apply[*[1][self::m:lt]] | m:reln[*[1][self::m:lt]]">
\r
470 <xsl:param name="p" select="0"/>
\r
471 <xsl:call-template name="infix">
\r
472 <xsl:with-param name="this-p" select="1"/>
\r
473 <xsl:with-param name="p" select="$p"/>
\r
474 <xsl:with-param name="mo">< </xsl:with-param>
\r
475 </xsl:call-template>
\r
478 <!-- 4.4.4.5 geq -->
\r
479 <xsl:template match="m:apply[*[1][self::m:geq]] | m:reln[*[1][self::m:geq]]">
\r
480 <xsl:param name="p" select="0"/>
\r
481 <xsl:call-template name="infix">
\r
482 <xsl:with-param name="this-p" select="1"/>
\r
483 <xsl:with-param name="p" select="$p"/>
\r
484 <xsl:with-param name="mo">\ge </xsl:with-param>
\r
485 </xsl:call-template>
\r
488 <!-- 4.4.4.6 leq -->
\r
489 <xsl:template match="m:apply[*[1][self::m:leq]] | m:reln[*[1][self::m:leq]]">
\r
490 <xsl:param name="p" select="0"/>
\r
491 <xsl:call-template name="infix">
\r
492 <xsl:with-param name="this-p" select="1"/>
\r
493 <xsl:with-param name="p" select="$p"/>
\r
494 <xsl:with-param name="mo">\le </xsl:with-param>
\r
495 </xsl:call-template>
\r
498 <!-- 4.4.4.7 equivalent -->
\r
499 <xsl:template match="m:apply[*[1][self::m:equivalent]] | m:reln[*[1][self::m:equivalent]]">
\r
500 <xsl:param name="p" select="0"/>
\r
501 <xsl:call-template name="infix">
\r
502 <xsl:with-param name="this-p" select="1"/>
\r
503 <xsl:with-param name="p" select="$p"/>
\r
504 <xsl:with-param name="mo">\equiv </xsl:with-param>
\r
505 </xsl:call-template>
\r
508 <!-- 4.4.4.8 approx -->
\r
509 <xsl:template match="m:apply[*[1][self::m:approx]] | m:reln[*[1][self::m:approx]]">
\r
510 <xsl:param name="p" select="0"/>
\r
511 <xsl:call-template name="infix">
\r
512 <xsl:with-param name="this-p" select="1"/>
\r
513 <xsl:with-param name="p" select="$p"/>
\r
514 <xsl:with-param name="mo">\approx </xsl:with-param>
\r
515 </xsl:call-template>
\r
518 <!-- 4.4.4.9 factorof -->
\r
519 <xsl:template match="m:apply[*[1][self::m:factorof]] | m:reln[*[1][self::m:factorof]]">
\r
520 <xsl:param name="p" select="0"/>
\r
521 <xsl:call-template name="binary">
\r
522 <xsl:with-param name="mo"> | </xsl:with-param>
\r
523 <xsl:with-param name="p" select="$p"/>
\r
524 <xsl:with-param name="this-p" select="3"/>
\r
525 </xsl:call-template>
\r
528 <!-- 4.4.5.1 int -->
\r
529 <xsl:template match="m:apply[*[1][self::m:int]]">
\r
530 <xsl:text>\int</xsl:text>
\r
531 <xsl:if test="m:lowlimit/*|m:interval/*[1]|m:condition/*">
\r
532 <xsl:text>_{</xsl:text>
\r
533 <xsl:apply-templates select="m:lowlimit/*|m:interval/*[1]|m:condition/*"/>
\r
534 <xsl:text>}</xsl:text>
\r
536 <xsl:if test="m:uplimit/*|m:interval/*[2]">
\r
537 <xsl:text>^{</xsl:text>
\r
538 <xsl:apply-templates select="m:uplimit/*|m:interval/*[2]"/>
\r
539 <xsl:text>}</xsl:text>
\r
541 <xsl:text> </xsl:text>
\r
542 <xsl:apply-templates select="*[last()]"/>
\r
543 <xsl:text>\,d </xsl:text>
\r
544 <xsl:apply-templates select="m:bvar"/>
\r
547 <!-- 4.4.5.2 diff -->
\r
548 <xsl:template match="m:apply[*[1][self::m:diff] and m:ci and count(*)=2]" priority="2">
\r
549 <xsl:apply-templates select="*[2]"/>
\r
550 <xsl:text>^\prime </xsl:text>
\r
553 <xsl:template match="m:apply[*[1][self::m:diff]]" priority="1">
\r
554 <xsl:text>\frac{</xsl:text>
\r
556 <xsl:when test="m:bvar/m:degree">
\r
557 <xsl:text>d^{</xsl:text>
\r
558 <xsl:apply-templates select="m:bvar/m:degree/node()"/>
\r
559 <xsl:text>}</xsl:text>
\r
560 <xsl:apply-templates select="*[last()]"/>
\r
561 <xsl:text>}{d</xsl:text>
\r
562 <xsl:apply-templates select="m:bvar/node()"/>
\r
563 <xsl:text>^{</xsl:text>
\r
564 <xsl:apply-templates select="m:bvar/m:degree/node()"/>
\r
565 <xsl:text>}</xsl:text>
\r
568 <xsl:text>d </xsl:text>
\r
569 <xsl:apply-templates select="*[last()]"/>
\r
570 <xsl:text>}{d </xsl:text>
\r
571 <xsl:apply-templates select="m:bvar"/>
\r
574 <xsl:text>}</xsl:text>
\r
577 <!-- 4.4.5.3 partialdiff -->
\r
578 <xsl:template match="m:apply[*[1][self::m:partialdiff] and m:list and m:ci and count(*)=3]" priority="2">
\r
579 <xsl:text>D_{</xsl:text>
\r
580 <xsl:for-each select="m:list[1]/*">
\r
581 <xsl:apply-templates select="."/>
\r
582 <xsl:if test="position()<last()"><xsl:text>, </xsl:text></xsl:if>
\r
584 <xsl:text>}</xsl:text>
\r
585 <xsl:apply-templates select="*[3]"/>
\r
588 <xsl:template match="m:apply[*[1][self::m:partialdiff]]" priority="1">
\r
589 <xsl:text>\frac{\partial^{</xsl:text>
\r
591 <xsl:when test="m:degree">
\r
592 <xsl:apply-templates select="m:degree/node()"/>
\r
594 <xsl:when test="m:bvar/m:degree[string(number(.))='NaN']">
\r
595 <xsl:for-each select="m:bvar/m:degree">
\r
596 <xsl:apply-templates select="node()"/>
\r
597 <xsl:if test="position()<last()"><xsl:text>+</xsl:text></xsl:if>
\r
599 <xsl:if test="count(m:bvar[not(m:degree)])>0">
\r
600 <xsl:text>+</xsl:text>
\r
601 <xsl:value-of select="count(m:bvar[not(m:degree)])"/>
\r
605 <xsl:value-of select="sum(m:bvar/m:degree)+count(m:bvar[not(m:degree)])"/>
\r
608 <xsl:text>}</xsl:text>
\r
609 <xsl:apply-templates select="*[last()]"/>
\r
610 <xsl:text>}{</xsl:text>
\r
611 <xsl:for-each select="m:bvar">
\r
612 <xsl:text>\partial </xsl:text>
\r
613 <xsl:apply-templates select="node()"/>
\r
614 <xsl:if test="m:degree">
\r
615 <xsl:text>^{</xsl:text>
\r
616 <xsl:apply-templates select="m:degree/node()"/>
\r
617 <xsl:text>}</xsl:text>
\r
620 <xsl:text>}</xsl:text>
\r
623 <!-- 4.4.2.8 declare 4.4.5.4 lowlimit 4.4.5.5 uplimit 4.4.5.7 degree 4.4.9.5 momentabout -->
\r
624 <xsl:template match="m:declare | m:lowlimit | m:uplimit | m:degree | m:momentabout"/>
\r
626 <!-- 4.4.5.6 bvar-->
\r
627 <xsl:template match="m:bvar">
\r
628 <xsl:apply-templates/>
\r
629 <xsl:if test="following-sibling::m:bvar"><xsl:text>, </xsl:text></xsl:if>
\r
632 <!-- 4.4.5.8 divergence-->
\r
633 <xsl:template match="m:divergence"><xsl:text>\mathop{\mathrm{div}}</xsl:text></xsl:template>
\r
635 <!-- 4.4.5.11 laplacian-->
\r
636 <xsl:template match="m:laplacian"><xsl:text>\nabla^2 </xsl:text></xsl:template>
\r
638 <!-- 4.4.6.1 set -->
\r
639 <xsl:template match="m:set">
\r
640 <xsl:text>\{</xsl:text><xsl:call-template name="set"/><xsl:text>\}</xsl:text>
\r
643 <!-- 4.4.6.2 list -->
\r
644 <xsl:template match="m:list">
\r
645 <xsl:text>\left[</xsl:text><xsl:call-template name="set"/><xsl:text>\right]</xsl:text>
\r
648 <xsl:template name="set">
\r
650 <xsl:when test="m:condition">
\r
651 <xsl:apply-templates select="m:bvar/*[not(self::bvar or self::condition)]"/>
\r
652 <xsl:text>\colon </xsl:text>
\r
653 <xsl:apply-templates select="m:condition/node()"/>
\r
656 <xsl:for-each select="*">
\r
657 <xsl:apply-templates select="."/>
\r
658 <xsl:if test="position()!=last()"><xsl:text>, </xsl:text></xsl:if>
\r
664 <!-- 4.4.6.3 union -->
\r
665 <xsl:template match="m:apply[*[1][self::m:union]]">
\r
666 <xsl:param name="p" select="0"/>
\r
667 <xsl:call-template name="infix">
\r
668 <xsl:with-param name="this-p" select="2"/>
\r
669 <xsl:with-param name="p" select="$p"/>
\r
670 <xsl:with-param name="mo">\cup </xsl:with-param>
\r
671 </xsl:call-template>
\r
674 <!-- 4.4.6.4 intersect -->
\r
675 <xsl:template match="m:apply[*[1][self::m:intersect]]">
\r
676 <xsl:param name="p" select="0"/>
\r
677 <xsl:call-template name="infix">
\r
678 <xsl:with-param name="this-p" select="3"/>
\r
679 <xsl:with-param name="p" select="$p"/>
\r
680 <xsl:with-param name="mo">\cap </xsl:with-param>
\r
681 </xsl:call-template>
\r
684 <!-- 4.4.6.5 in -->
\r
685 <xsl:template match="m:apply[*[1][self::m:in]] | m:reln[*[1][self::m:in]]">
\r
686 <xsl:param name="p" select="0"/>
\r
687 <xsl:call-template name="binary">
\r
688 <xsl:with-param name="mo">\in </xsl:with-param>
\r
689 <xsl:with-param name="p" select="$p"/>
\r
690 <xsl:with-param name="this-p" select="3"/>
\r
691 </xsl:call-template>
\r
694 <!-- 4.4.6.6 notin -->
\r
695 <xsl:template match="m:apply[*[1][self::m:notin]] | m:reln[*[1][self::m:notin]]">
\r
696 <xsl:param name="p" select="0"/>
\r
697 <xsl:call-template name="binary">
\r
698 <xsl:with-param name="mo">\notin </xsl:with-param>
\r
699 <xsl:with-param name="p" select="$p"/>
\r
700 <xsl:with-param name="this-p" select="3"/>
\r
701 </xsl:call-template>
\r
704 <!-- 4.4.6.7 subset -->
\r
705 <xsl:template match="m:apply[*[1][self::m:subset]] | m:reln[*[1][self::m:subset]]">
\r
706 <xsl:param name="p" select="0"/>
\r
707 <xsl:call-template name="infix">
\r
708 <xsl:with-param name="this-p" select="2"/>
\r
709 <xsl:with-param name="p" select="$p"/>
\r
710 <xsl:with-param name="mo">\subseteq </xsl:with-param>
\r
711 </xsl:call-template>
\r
714 <!-- 4.4.6.8 prsubset -->
\r
715 <xsl:template match="m:apply[*[1][self::m:prsubset]] | m:reln[*[1][self::m:prsubset]]">
\r
716 <xsl:param name="p" select="0"/>
\r
717 <xsl:call-template name="infix">
\r
718 <xsl:with-param name="this-p" select="2"/>
\r
719 <xsl:with-param name="p" select="$p"/>
\r
720 <xsl:with-param name="mo">\subset </xsl:with-param>
\r
721 </xsl:call-template>
\r
724 <!-- 4.4.6.9 notsubset -->
\r
725 <xsl:template match="m:apply[*[1][self::m:notsubset]] | m:reln[*[1][self::m:notsubset]]">
\r
726 <xsl:param name="p" select="0"/>
\r
727 <xsl:call-template name="binary">
\r
728 <xsl:with-param name="this-p" select="2"/>
\r
729 <xsl:with-param name="p" select="$p"/>
\r
730 <xsl:with-param name="mo">\nsubseteq </xsl:with-param>
\r
731 </xsl:call-template>
\r
734 <!-- 4.4.6.10 notprsubset -->
\r
735 <xsl:template match="m:apply[*[1][self::m:notprsubset]] | m:reln[*[1][self::m:notprsubset]]">
\r
736 <xsl:param name="p" select="0"/>
\r
737 <xsl:call-template name="binary">
\r
738 <xsl:with-param name="this-p" select="2"/>
\r
739 <xsl:with-param name="p" select="$p"/>
\r
740 <xsl:with-param name="mo">\not\subset </xsl:with-param>
\r
741 </xsl:call-template>
\r
744 <!-- 4.4.6.11 setdiff -->
\r
745 <xsl:template match="m:apply[*[1][self::m:setdiff]]">
\r
746 <xsl:param name="p" select="0"/>
\r
747 <xsl:call-template name="binary">
\r
748 <xsl:with-param name="this-p" select="2"/>
\r
749 <xsl:with-param name="p" select="$p"/>
\r
750 <xsl:with-param name="mo">\setminus </xsl:with-param>
\r
751 </xsl:call-template>
\r
754 <!-- 4.4.6.12 card -->
\r
755 <xsl:template match="m:apply[*[1][self::m:card]]">
\r
756 <xsl:text>|</xsl:text>
\r
757 <xsl:apply-templates select="*[2]"/>
\r
758 <xsl:text>|</xsl:text>
\r
761 <!-- 4.4.6.13 cartesianproduct 4.4.10.6 vectorproduct -->
\r
762 <xsl:template match="m:apply[*[1][self::m:cartesianproduct or self::m:vectorproduct]]">
\r
763 <xsl:param name="p" select="0"/>
\r
764 <xsl:call-template name="infix">
\r
765 <xsl:with-param name="this-p" select="2"/>
\r
766 <xsl:with-param name="p" select="$p"/>
\r
767 <xsl:with-param name="mo">\times </xsl:with-param>
\r
768 </xsl:call-template>
\r
772 match="m:apply[*[1][self::m:cartesianproduct][count(following-sibling::m:reals)=count(following-sibling::*)]]"
\r
774 <xsl:apply-templates select="*[2]">
\r
775 <xsl:with-param name="p" select="5"/>
\r
776 </xsl:apply-templates>
\r
777 <xsl:text>^{</xsl:text>
\r
778 <xsl:value-of select="count(*)-1"/>
\r
779 <xsl:text>}</xsl:text>
\r
782 <!-- 4.4.7.1 sum -->
\r
783 <xsl:template match="m:apply[*[1][self::m:sum]]">
\r
784 <xsl:text>\sum</xsl:text><xsl:call-template name="series"/>
\r
787 <!-- 4.4.7.2 product -->
\r
788 <xsl:template match="m:apply[*[1][self::m:product]]">
\r
789 <xsl:text>\prod</xsl:text><xsl:call-template name="series"/>
\r
792 <xsl:template name="series">
\r
793 <xsl:if test="m:lowlimit/*|m:interval/*[1]|m:condition/*">
\r
794 <xsl:text>_{</xsl:text>
\r
795 <xsl:if test="not(m:condition)">
\r
796 <xsl:apply-templates select="m:bvar"/>
\r
797 <xsl:text>=</xsl:text>
\r
799 <xsl:apply-templates select="m:lowlimit/*|m:interval/*[1]|m:condition/*"/>
\r
800 <xsl:text>}</xsl:text>
\r
802 <xsl:if test="m:uplimit/*|m:interval/*[2]">
\r
803 <xsl:text>^{</xsl:text>
\r
804 <xsl:apply-templates select="m:uplimit/*|m:interval/*[2]"/>
\r
805 <xsl:text>}</xsl:text>
\r
807 <xsl:text> </xsl:text>
\r
808 <xsl:apply-templates select="*[last()]"/>
\r
811 <!-- 4.4.7.3 limit -->
\r
812 <xsl:template match="m:apply[*[1][self::m:limit]]">
\r
813 <xsl:text>\lim_{</xsl:text>
\r
814 <xsl:apply-templates select="m:lowlimit|m:condition/*"/>
\r
815 <xsl:text>}</xsl:text>
\r
816 <xsl:apply-templates select="*[last()]"/>
\r
819 <xsl:template match="m:apply[m:limit]/m:lowlimit" priority="3">
\r
820 <xsl:apply-templates select="../m:bvar/node()"/>
\r
821 <xsl:text>\to </xsl:text>
\r
822 <xsl:apply-templates/>
\r
825 <!-- 4.4.7.4 tendsto -->
\r
826 <xsl:template match="m:apply[*[1][self::m:tendsto]] | m:reln[*[1][self::m:tendsto]]">
\r
827 <xsl:param name="p"/>
\r
828 <xsl:call-template name="binary">
\r
829 <xsl:with-param name="this-p" select="2"/>
\r
830 <xsl:with-param name="p" select="$p"/>
\r
831 <xsl:with-param name="mo">
\r
833 <xsl:when test="*[1][@type='above']">\searrow </xsl:when>
\r
834 <xsl:when test="*[1][@type='below']">\nearrow </xsl:when>
\r
835 <xsl:when test="*[1][@type='two-sided']">\rightarrow </xsl:when>
\r
836 <xsl:otherwise>\to </xsl:otherwise>
\r
839 </xsl:call-template>
\r
842 <!-- 4.4.8.1 common tringonometric functions 4.4.8.3 natural logarithm -->
\r
843 <xsl:template match="m:apply[*[1][
\r
844 self::m:sin or self::m:cos or self::m:tan or self::m:sec or
\r
845 self::m:csc or self::m:cot or self::m:sinh or self::m:cosh or
\r
846 self::m:tanh or self::m:coth or self::m:arcsin or self::m:arccos or
\r
847 self::m:arctan or self::m:ln]]">
\r
848 <xsl:text>\</xsl:text>
\r
849 <xsl:value-of select="local-name(*[1])"/>
\r
850 <xsl:text> </xsl:text>
\r
851 <xsl:apply-templates select="*[2]">
\r
852 <xsl:with-param name="p" select="7"/>
\r
853 </xsl:apply-templates>
\r
856 <xsl:template match="m:sin | m:cos | m:tan | m:sec | m:csc |
\r
857 m:cot | m:sinh | m:cosh | m:tanh | m:coth |
\r
858 m:arcsin | m:arccos | m:arctan | m:ln">
\r
859 <xsl:text>\</xsl:text>
\r
860 <xsl:value-of select="local-name(.)"/>
\r
861 <xsl:text> </xsl:text>
\r
864 <xsl:template match="m:apply[*[1][
\r
865 self::m:sech or self::m:csch or self::m:arccosh or
\r
866 self::m:arccot or self::m:arccoth or self::m:arccsc or
\r
867 self::m:arccsch or self::m:arcsec or self::m:arcsech or
\r
868 self::m:arcsinh or self::m:arctanh]]">
\r
869 <xsl:text>\mathrm{</xsl:text>
\r
870 <xsl:value-of select="local-name(*[1])"/>
\r
871 <xsl:text>\,}</xsl:text>
\r
872 <xsl:apply-templates select="*[2]">
\r
873 <xsl:with-param name="p" select="7"/>
\r
874 </xsl:apply-templates>
\r
877 <xsl:template match="m:sech | m:csch | m:arccosh | m:arccot |
\r
878 m:arccoth | m:arccsc |m:arccsch |m:arcsec |
\r
879 m:arcsech | m:arcsinh | m:arctanh">
\r
880 <xsl:text>\mathrm{</xsl:text>
\r
881 <xsl:value-of select="local-name(.)"/>
\r
882 <xsl:text>}</xsl:text>
\r
885 <!-- 4.4.8.2 exp -->
\r
886 <xsl:template match="m:apply[*[1][self::m:exp]]">
\r
887 <xsl:text>e^{</xsl:text><xsl:apply-templates select="*[2]"/><xsl:text>}</xsl:text>
\r
890 <!-- 4.4.8.4 log -->
\r
891 <xsl:template match="m:apply[*[1][self::m:log]]">
\r
892 <xsl:text>\lg </xsl:text>
\r
893 <xsl:apply-templates select="*[last()]">
\r
894 <xsl:with-param name="p" select="7"/>
\r
895 </xsl:apply-templates>
\r
898 <xsl:template match="m:apply[*[1][self::m:log] and m:logbase != 10]">
\r
899 <xsl:text>\log_{</xsl:text>
\r
900 <xsl:apply-templates select="m:logbase/node()"/>
\r
901 <xsl:text>}</xsl:text>
\r
902 <xsl:apply-templates select="*[last()]">
\r
903 <xsl:with-param name="p" select="7"/>
\r
904 </xsl:apply-templates>
\r
907 <!-- 4.4.9.1 mean -->
\r
908 <xsl:template match="m:apply[*[1][self::m:mean]]">
\r
909 <xsl:text>\langle </xsl:text>
\r
910 <xsl:for-each select="*[position()>1]">
\r
911 <xsl:apply-templates select="."/>
\r
912 <xsl:if test="position() !=last()"><xsl:text>, </xsl:text></xsl:if>
\r
914 <xsl:text>\rangle </xsl:text>
\r
917 <!-- 4.4.9.2 sdef -->
\r
918 <xsl:template match="m:sdev"><xsl:text>\sigma </xsl:text></xsl:template>
\r
920 <!-- 4.4.9.3 variance -->
\r
921 <xsl:template match="m:apply[*[1][self::m:variance]]">
\r
922 <xsl:text>\sigma(</xsl:text>
\r
923 <xsl:apply-templates select="*[2]"/>
\r
924 <xsl:text>)^2</xsl:text>
\r
927 <!-- 4.4.9.5 moment -->
\r
928 <xsl:template match="m:apply[*[1][self::m:moment]]">
\r
929 <xsl:text>\langle </xsl:text>
\r
930 <xsl:apply-templates select="*[last()]"/>
\r
931 <xsl:text>^{</xsl:text>
\r
932 <xsl:apply-templates select="m:degree/node()"/>
\r
933 <xsl:text>}\rangle</xsl:text>
\r
934 <xsl:if test="m:momentabout">
\r
935 <xsl:text>_{</xsl:text>
\r
936 <xsl:apply-templates select="m:momentabout/node()"/>
\r
937 <xsl:text>}</xsl:text>
\r
939 <xsl:text> </xsl:text>
\r
942 <!-- 4.4.10.1 vector -->
\r
943 <xsl:template match="m:vector">
\r
944 <xsl:text>\left(\begin{array}{c}</xsl:text>
\r
945 <xsl:for-each select="*">
\r
946 <xsl:apply-templates select="."/>
\r
947 <xsl:if test="position()!=last()"><xsl:text>\\ </xsl:text></xsl:if>
\r
949 <xsl:text>\end{array}\right)</xsl:text>
\r
952 <!-- 4.4.10.2 matrix -->
\r
953 <xsl:template match="m:matrix">
\r
954 <xsl:text>\begin{pmatrix}</xsl:text>
\r
955 <xsl:apply-templates/>
\r
956 <xsl:text>\end{pmatrix}</xsl:text>
\r
959 <!-- 4.4.10.3 matrixrow -->
\r
960 <xsl:template match="m:matrixrow">
\r
961 <xsl:for-each select="*">
\r
962 <xsl:apply-templates select="."/>
\r
963 <xsl:if test="position()!=last()"><xsl:text> & </xsl:text></xsl:if>
\r
965 <xsl:if test="position()!=last()"><xsl:text>\\ </xsl:text></xsl:if>
\r
968 <!-- 4.4.10.4 determinant -->
\r
969 <xsl:template match="m:apply[*[1][self::m:determinant]]">
\r
970 <xsl:text>\det </xsl:text>
\r
971 <xsl:apply-templates select="*[2]">
\r
972 <xsl:with-param name="p" select="7"/>
\r
973 </xsl:apply-templates>
\r
976 <xsl:template match="m:apply[*[1][self::m:determinant]][*[2][self::m:matrix]]" priority="2">
\r
977 <xsl:text>\begin{vmatrix}</xsl:text>
\r
978 <xsl:apply-templates select="m:matrix/*"/>
\r
979 <xsl:text>\end{vmatrix}</xsl:text>
\r
982 <!-- 4.4.10.5 transpose -->
\r
983 <xsl:template match="m:apply[*[1][self::m:transpose]]">
\r
984 <xsl:apply-templates select="*[2]">
\r
985 <xsl:with-param name="p" select="7"/>
\r
986 </xsl:apply-templates>
\r
987 <xsl:text>^T</xsl:text>
\r
990 <!-- 4.4.10.6 selector -->
\r
991 <xsl:template match="m:apply[*[1][self::m:selector]]">
\r
992 <xsl:apply-templates select="*[2]">
\r
993 <xsl:with-param name="p" select="7"/>
\r
994 </xsl:apply-templates>
\r
995 <xsl:text>_{</xsl:text>
\r
996 <xsl:for-each select="*[position()>2]">
\r
997 <xsl:apply-templates select="."/>
\r
998 <xsl:if test="position() !=last()"><xsl:text>, </xsl:text></xsl:if>
\r
1000 <xsl:text>}</xsl:text>
\r
1003 <!-- 4.4.10.8 scalarproduct -->
\r
1004 <xsl:template match="m:apply[*[1][self::m:scalarproduct]]">
\r
1005 <xsl:param name="p" select="0"/>
\r
1006 <xsl:call-template name="infix">
\r
1007 <xsl:with-param name="this-p" select="2"/>
\r
1008 <xsl:with-param name="p" select="$p"/>
\r
1009 <xsl:with-param name="mo">\cdot </xsl:with-param>
\r
1010 </xsl:call-template>
\r
1013 <!-- 4.4.10.9 outerproduct -->
\r
1014 <xsl:template match="m:apply[*[1][self::m:outerproduct]]">
\r
1015 <xsl:param name="p" select="0"/>
\r
1016 <xsl:call-template name="infix">
\r
1017 <xsl:with-param name="this-p" select="2"/>
\r
1018 <xsl:with-param name="p" select="$p"/>
\r
1019 <xsl:with-param name="mo">\otimes </xsl:with-param>
\r
1020 </xsl:call-template>
\r
1023 <!-- 4.4.11.2 semantics -->
\r
1024 <xsl:template match="m:semantics"><xsl:apply-templates select="*[1]"/></xsl:template>
\r
1026 <xsl:template match="m:semantics[m:annotation/@encoding='TeX']">
\r
1027 <xsl:apply-templates select="m:annotation[@encoding='TeX']/node()"/>
\r
1030 <!-- 4.4.12.1 integers -->
\r
1031 <xsl:template match="m:integers"><xsl:text>\mathbb{Z}</xsl:text></xsl:template>
\r
1033 <!-- 4.4.12.2 reals -->
\r
1034 <xsl:template match="m:reals"><xsl:text>\mathbb{R}</xsl:text></xsl:template>
\r
1036 <!-- 4.4.12.3 rationals -->
\r
1037 <xsl:template match="m:rationals"><xsl:text>\mathbb{Q}</xsl:text></xsl:template>
\r
1039 <!-- 4.4.12.4 naturalnumbers -->
\r
1040 <xsl:template match="m:naturalnumbers"><xsl:text>\mathbb{N}</xsl:text></xsl:template>
\r
1042 <!-- 4.4.12.5 complexes -->
\r
1043 <xsl:template match="m:complexes"><xsl:text>\mathbb{C}</xsl:text></xsl:template>
\r
1045 <!-- 4.4.12.6 primes -->
\r
1046 <xsl:template match="m:primes"><xsl:text>\mathbb{P}</xsl:text></xsl:template>
\r
1048 <!-- 4.4.12.7 exponentiale -->
\r
1049 <xsl:template match="m:exponentiale"><xsl:text>e</xsl:text></xsl:template>
\r
1051 <!-- 4.4.12.8 imaginaryi -->
\r
1052 <xsl:template match="m:imaginaryi"><xsl:text>i</xsl:text></xsl:template>
\r
1054 <!-- 4.4.12.9 notanumber -->
\r
1055 <xsl:template match="m:notanumber"><xsl:text>NaN</xsl:text></xsl:template>
\r
1057 <!-- 4.4.12.10 true -->
\r
1058 <xsl:template match="m:true"><xsl:text>\mbox{true}</xsl:text></xsl:template>
\r
1060 <!-- 4.4.12.11 false -->
\r
1061 <xsl:template match="m:false"><xsl:text>\mbox{false}</xsl:text></xsl:template>
\r
1063 <!-- 4.4.12.12 emptyset -->
\r
1064 <xsl:template match="m:emptyset"><xsl:text>\emptyset </xsl:text></xsl:template>
\r
1066 <!-- 4.4.12.13 pi -->
\r
1067 <xsl:template match="m:pi"><xsl:text>\pi </xsl:text></xsl:template>
\r
1069 <!-- 4.4.12.14 eulergamma -->
\r
1070 <xsl:template match="m:eulergamma"><xsl:text>\gamma </xsl:text></xsl:template>
\r
1072 <!-- 4.4.12.15 infinity -->
\r
1073 <xsl:template match="m:infinity"><xsl:text>\infty </xsl:text></xsl:template>
\r
1075 <!-- ****************************** -->
\r
1076 <xsl:template name="infix" >
\r
1077 <xsl:param name="mo"/>
\r
1078 <xsl:param name="p" select="0"/>
\r
1079 <xsl:param name="this-p" select="0"/>
\r
1080 <xsl:if test="$this-p < $p"><xsl:text>(</xsl:text></xsl:if>
\r
1081 <xsl:for-each select="*[position()>1]">
\r
1082 <xsl:if test="position() > 1">
\r
1083 <xsl:copy-of select="$mo"/>
\r
1085 <xsl:apply-templates select=".">
\r
1086 <xsl:with-param name="p" select="$this-p"/>
\r
1087 </xsl:apply-templates>
\r
1089 <xsl:if test="$this-p < $p"><xsl:text>)</xsl:text></xsl:if>
\r
1092 <xsl:template name="binary" >
\r
1093 <xsl:param name="mo"/>
\r
1094 <xsl:param name="p" select="0"/>
\r
1095 <xsl:param name="this-p" select="0"/>
\r
1096 <xsl:if test="$this-p < $p"><xsl:text>(</xsl:text></xsl:if>
\r
1097 <xsl:apply-templates select="*[2]">
\r
1098 <xsl:with-param name="p" select="$this-p"/>
\r
1099 </xsl:apply-templates>
\r
1100 <xsl:value-of select="$mo"/>
\r
1101 <xsl:apply-templates select="*[3]">
\r
1102 <xsl:with-param name="p" select="$this-p"/>
\r
1103 </xsl:apply-templates>
\r
1104 <xsl:if test="$this-p < $p"><xsl:text>)</xsl:text></xsl:if>
\r