复制文字 - 加倍字母(Mathjax)

时间:2017-09-06 19:04:19

标签: mathjax

我想问你关于“加倍字母”的问题,同时用Mathjax复制页面。

  1. 在第一页,我尝试复制Mathjax公式,如下所示: Look at picture 1
  2. 然后我在记事本上收到:∫x2dx= 2x +C∫x2dx= 2x + C

    所以它复制两次相同的公式。

    1. 在第二页,我尝试复制Mathjax公式,如下所示: Look at picture 2
    2. 在这里,当我复制Mathjax公式然后我在记事本中收到:(x + 1)2 =?

      所以这里复制公式正确,它没有复制加倍。

      这是我的问题 - 这是什么原因,第一页给出了双重公式同时复制?这对我来说是个大问题,因为谷歌在第一页上阅读公式也“两次”。我该如何修复这个问题?

      (我不能把链接放到这些页面上,因为我的声誉太低了)

2 个答案:

答案 0 :(得分:2)

这是由MathJax的AssistiveMML extension引起的,它将视觉隐藏但可访问的MathML与MathJax的输出一起注入DOM。

虽然MathML片段获得user-select:none(以防止复制和粘贴),但并非所有浏览器都支持此CSS功能。

作为读者,您可以通过Accessibility>下的MathJax菜单(righ / cmd-单击表达式)禁用扩展名。 Assisitve MathML。

答案 1 :(得分:1)

您可以添加此脚本以将MathJax元素直接复制为LaTeX或MML!它使用jQuery,但你可以手动删除它:

var MathJaxRevertRendering = function(html){
    var $ = jQuery;
    var stencil = $('<div>' + html + '</div>');
    var replaceMathJax = function(){
        if ($(this).parents('.mjx-chtml').length) return;

        var math = $(this).find('math');
        if (math.length){
            var latex = math.find('annotation[encoding="LaTeX"]');
            if (latex.length){
                $(this).replaceWith( '$$' + $.trim(latex.html()) + '$$');
            }else{
                $(this).replaceWith( math[0].outerHTML );
            }
        }
    };
    if (stencil.find('.mjx-chtml').length){
        stencil.find('.MathJax_Preview,script').remove();
        stencil.find('.mjx-chtml').each(replaceMathJax);
        html = stencil.html();
    }
    return html;
};

document.addEventListener('copy', function(e){
    var getSelectionHtml = function() {
        var html = "";
        if (typeof window.getSelection != "undefined") {
            var sel = window.getSelection();
            if (sel.rangeCount) {
                var container = document.createElement("div");
                for (var i = 0, len = sel.rangeCount; i < len; ++i) {
                    container.appendChild(sel.getRangeAt(i).cloneContents());
                }
                html = container.innerHTML;
            }
        } else if (typeof document.selection != "undefined") {
            if (document.selection.type == "Text") {
                html = document.selection.createRange().htmlText;
            }
        }
        return html;
    };
    var html = getSelectionHtml();
    var htmlLatexed = MathJaxRevertRendering(html);
    if (html != htmlLatexed){
        e.clipboardData.setData('text/html', htmlLatexed);
        var removeHTML = true;
        e.clipboardData.setData('text/plain', htmlLatexed.split(/(<math)|(<\/math>)/).reduce(function(buffer, val){
            if (!val) return buffer;
            if (val == '<math' || val == '</math>'){
                removeHTML = !removeHTML;
                buffer += val;
            }else{
                buffer+=removeHTML ? jQuery('<div>'+val+'</div>').text() : val;
            }
            return buffer;
        }, ''));
        e.preventDefault();
    }
});

然后,任何使用MathJax元素在您的网站上复制内容的人:将其粘贴到任何编辑器时都会看到数学格式良好。