MathML 标记无法在 JavaFX WebView 中正确呈现

Posted

技术标签:

【中文标题】MathML 标记无法在 JavaFX WebView 中正确呈现【英文标题】:MathML tags don't render properly in JavaFX WebView 【发布时间】:2019-02-05 11:55:37 【问题描述】:

JDK 版本:1.8.0_192

例如,

<math xmlns="http://www.w3.org/1998/Math/MathML"> 
   <msub> 
    <mi>
      S 
    </mi> 
    <mi>
      n 
    </mi> 
   </msub> 
   <mo>
     &lt; 
   </mo> 
   <mstyle displaystyle="true" scriptlevel="0"> 
    <mfrac> 
     <mi>
       π 
     </mi> 
     <mrow> 
      <mn>
        3 
      </mn>     
      <msqrt> 
       <mn>
         3 
       </mn> 
      </msqrt> 
     </mrow> 
    </mfrac> 
   </mstyle> 
 </math>

以上代码呈现为:

在谷歌浏览器中,它呈现为:

在 JavaFX WebView 中。

如何解决这个问题?

【问题讨论】:

【参考方案1】:

您发布的代码在我的计算机上的结果? ?

首先,请确保您至少使用 Java/JavaFX 8 192 build 04 或 JavaFX 11(Java/JavaFX 9 和 10 中的 MathML 支持已损坏,并且不会在这些版本中得到修复)。

其次,验证您的字体列表。可能是您计算机上的字体配置问题?

必须至少安装其中一种字体(按优先顺序):

Latin Modern Math

STIX Two Math

XITS Math STIX Math Libertinus Math

TeX Gyre Termes Math

TeX Gyre Bonum Math

TeX Gyre Schola

DejaVu Math TeX Gyre

TeX Gyre Pagella Math

Asana Math

Cambria Math

Lucida Bright Math

Minion Math

Times New Roman

我电脑上的结果也是,但是在Latin Modern Math字体安装之后:

代码示例:你使用过这样的代码吗?

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class NavigateurTest extends Application 

    final StackPane root = new StackPane();
    final WebView webView =  new WebView();
    String Content*** = ""
            + "<math xmlns=\"http://www.w3.org/1998/Math/MathML\">"
            + "   <msub>"
            + "      <mi>S</mi>"
            + "      <mi>n</mi>"
            + "   </msub>"
            + "   <mo>&lt;</mo>"
            + "   <mstyle displaystyle=\"true\" scriptlevel=\"0\">"
            + "      <mfrac>"
            + "         <mi>π</mi>"
            + "         <mrow>"
            + "            <mn>3</mn>"
            + "            <msqrt>"
            + "               <mn>3</mn>"
            + "            </msqrt>"
            + "         </mrow>"
            + "      </mfrac>"
            + "   </mstyle>"
            + "</math>";

    public void init()     
        root.getChildren().add(webView);
    

    @Override
    public void start(Stage primaryStage) 

        //webView.getEngine().load("https://www.qwant.com");
        webView.getEngine().loadContent(Content***);

        primaryStage.setTitle("OpenJFX MathML Rendering WebBrowser Test");
        primaryStage.setScene(new Scene(root));
        primaryStage.show();

    


【讨论】:

谢谢。但是,EA 版本中似乎存在一个错误,阻止 IntelliJ 使用 OpenJDK 11。Details here 任何解决方法? 这真的离你最先发的主题很远吗? ? ? 安装了上述字体的 jdk 8u192 build 4 也不起作用。 我不确定你的任务是什么。 JFX 8 和 JFX 11 中的 MathML 支持是相同的。实际上,我很久以前就开始使用 JDK 11 和 JFX 11,所以我从不使用 IDE,因为它们还没有准备好使用 JDK 11 和 JFX11。目前,我正在使用自己的 JFX 构建脚本。 我用 Windows 和 Linux 测试过,结果是一样的。你的操作系统是什么?

以上是关于MathML 标记无法在 JavaFX WebView 中正确呈现的主要内容,如果未能解决你的问题,请参考以下文章

数学置标语言(MathML)

印象笔记 如何使用mathml

HTML5math标签

带有 VSCode 的 JavaFX-11

JavaFX BarChart xAxis标记错误的定位

Cordova 插件初始化