1. 程式人生 > >把圖片公式轉化為文字內容。vue專案中引入MathJax.js

把圖片公式轉化為文字內容。vue專案中引入MathJax.js

這是個圖片的公式,有img標籤引入。

我們想要轉成下面的效果:

 

在vue專案中引入MathJax.js

首先在index.html頁面

 <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML-full"></script>  <!--不使用圖片顯示數學公式外掛-->

 

因為有很多頁面需要用到這個外掛,所以我封裝到了一個公共的js檔案裡面,想用的時候直接呼叫。

下面是自定義的util.js

export default {

            //公式轉換的配置檔案
    MathConfig(){

            this.loadjs('../../../static/js/jquery-1.9.1.min.js');//使用公式必須先載入js

            window.MathJax.Hub.Config({
                    showProcessingMessages: false,
                    messageStyle: "none",
                    extensions: ["tex2jax.js"],
                    jax: ["input/TeX", "output/HTML-CSS"],
                    tex2jax: {
                        inlineMath:  [ ["$", "$"] ],
                        displayMath: [ ["$$","$$"] ],
                        skipTags: ['script', 'noscript', 'style', 'textarea', 'pre','code','a'],
                        ignoreClass:"comment-content"
                    },
                    "HTML-CSS": {
                        availableFonts: ["STIX","TeX"],
                        showMathMenu: true
                    }
               });
        },

        //把圖片公式替換成字元
    MathComputed(resourceLists){//resourceLists就是我想替換的裡面可能有圖片公式的內容。他如果是個陣列直接用data接收,如果不是陣列,push進data,讓他成為陣列。因為下面迴圈的所以這裡必須放在數組裡面。
        var data=[];
        if(resourceLists.length>0){data=resourceLists;}
        else{data.push(resourceLists);}

           for(var k=0;k<data.length;k++){//迴圈裡面的題幹內容

               var html ='<div><div class="mathDiv">'+data[k].questionstem+'</div></div>';

                var htmlObj = $(html); //將字串轉為jquery的dom物件
                var filterObj = htmlObj.find(".kfformula"); //對轉換後的物件進行查詢
               if(filterObj.length>0){//如果有公式。替換圖片
                    for(var i=0;i<filterObj.length;i++){
                        var latex = '$' + $(filterObj[i]).attr('data-latex') + '$';
                        $(filterObj[i]).replaceWith(latex);
                    } 
                       data[k].questionstem=htmlObj.html();   
                }else{//沒有公式直接取值
                         data[k].questionstem=data[k].questionstem;

                     }
                }
           }
            return data;
    },

};

 

再具體的頁面呼叫那寫函式

import  util   from  '../static/util.js'

mounted() {
            util.MathConfig();//呼叫配置檔案

},

//轉換頁面的圖片數學公式
                util.MathComputed(this.resourceLists);    //這裡是this.resourceLists是介面獲取的要轉化的內容
                this.$nextTick(()=>{    //必須寫這個表示dom元素都載入完了。
                      var mathdivs = $('#app').find(".mathDiv"); //對轉換後的物件進行查詢
                     for(var i=0;i<mathdivs.length;i++){  //必須迴圈然後才有作用,如果直接寫#app不好用。所以這裡就迴圈了
                          window.MathJax.Hub.Queue(["Typeset", MathJax.Hub, $(mathdivs[i])[0]]);
                        }

                 })

 

可以看一下沒有在vue專案中寫的外掛https://download.csdn.net/download/qq_33769914/10754774