2017-07-06 4 views
0

MathMLで書かれた数式を使って本を入力しています。DocBook 5、(MathML)名前空間をHTML出力に追加しますか?

<?xml version="1.0" encoding="utf-8"?> 
<book xmlns="http://docbook.org/ns/docbook" 
     xmlns:xi="http://www.w3.org/2001/XInclude" 
     version="5.1" 
     xml:lang="en"> 
    <title>Some title</title> 
    <xi:include href="intro.xml"/> 
</book> 

そしてintro.xmlこれは

<p>Some text 
<m:math xmlns:m="http://www.w3.org/1998/Math/MathML"> 
    <m:msqrt><m:mi>a</m:mi></m:msqrt> 
</m:math> 
Some other text.</p> 

私のような何かを作り出す

<?xml version="1.0" encoding="utf-8"?> 
<chapter xml:id="ch-intro" xmlns:m="http://www.w3.org/1998/Math/MathML"> 
    <title>Introduction</title> 
    <para>Some text 
    <inlineequation> 
    <m:math><m:msqrt><m:mi>a</m:mi></m:msqrt></m:math> 
    </inlineequation> 
    Some other text. 
    </para> 
</chapter> 

として行く:本は、すべての章のこのようなファイルが含まれて "メイン" XMLファイルを持っていますDocbook-XSLのHTML XSLTの上にMathJaxをロードするためのカスタマイズレイヤーXSLTがあります。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:m="http://www.w3.org/1998/Math/MathML" 
       version="1.0"> 
    <xsl:import href="docbook-xsl-nons-snapshot/html/docbook.xsl"/> 
    <!-- Add MathJax <script> tags to document <head> --> 
    <xsl:template name="user.head.content"> 
    <script type="text/javascript" async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=MML_CHTML"></script> 
    </xsl:template> 
</xsl:stylesheet> 

<script>タグは<head>に追加されますが、MathML名前空間が<math>になっても機能しないため、MathJaxは式を表示しません。名前空間は<html>にする必要があります。

私の質問は、xmlns:m="http://www.w3.org/1998/Math/MathML"を生成された<html>タグに追加するためにXSLTカスタマイズレイヤをどのように書くべきですか?そのモジュールは、私が生成され、ルート要素があまりにもそれを持っていることを期待するのMathML名前空間宣言を持っていることを考えると

<xsl:template match="*" mode="process.root"> 
    <xsl:variable name="doc" select="self::*"/> 

    <xsl:call-template name="user.preroot"/> 
    <xsl:call-template name="root.messages"/> 

    <html> 
    <xsl:call-template name="root.attributes"/> 
    <head> 
     <xsl:call-template name="system.head.content"> 
     <xsl:with-param name="node" select="$doc"/> 
     </xsl:call-template> 
     <xsl:call-template name="head.content"> 
     <xsl:with-param name="node" select="$doc"/> 
     </xsl:call-template> 
     <xsl:call-template name="user.head.content"> 
     <xsl:with-param name="node" select="$doc"/> 
     </xsl:call-template> 
    </head> 
    <body> 
     <xsl:call-template name="body.attributes"/> 
     <xsl:call-template name="user.header.content"> 
     <xsl:with-param name="node" select="$doc"/> 
     </xsl:call-template> 
     <xsl:apply-templates select="."/> 
     <xsl:call-template name="user.footer.content"> 
     <xsl:with-param name="node" select="$doc"/> 
     </xsl:call-template> 
    </body> 
    </html> 
    <xsl:value-of select="$html.append"/> 

    <!-- Generate any css files only once, not once per chunk --> 
    <xsl:call-template name="generate.css.files"/> 
</xsl:template> 

:あなたがメインのスタイルシートモジュールにそれを置くことによって、以下のテンプレートを上書きする場合はどうなります

答えて

1

+0

これは素晴らしい動作です!また、それぞれにxmlns:m属性がないようにします。ありがとう! – MetroWind

関連する問題