2013-07-27 49 views
1

我在我的網站上使用MathJax,我想添加一些語義支持。定義新的宏以添加「標題」屬性

目前,我的MathJax配置是採用TeX輸入並吐出HTML-CSS輸出(不幸的是,MathML在Chrome中效果不佳)。我也有一個jQuery函數,它接受任何.latex類的html並將其轉儲到title屬性中。

以下HTML ...

<div class="latex">\[ a^2 + b^2 = c^2 \]</div> 

與下面的腳本...

/* jQuery */ 
$('.latex').attr('title', function() { 
    return $(this).html(); 
}) 

將輸出...

<div class="latex" title="\[ a^2 + b^2 = c^2 \]"> 
    <div class="MathJax_Display">a2+b2=c2</div> <!-- becomes prettyprint in browser --> 
</div> 

明顯的div.MathJax_Display內容將是風格與整個跨度和班級和風格。我只是不打算在這裏輸入所有內容。無論如何,在渲染數學後,用戶可以將鼠標懸停在div.latex上以在工具提示中查看TeX命令。

現在,我想要做的就是在我的MJ配置中定義一個新的宏,它會在給定一點TeX輸入的情況下將title屬性添加到新創建的HTML-CSS輸出範圍。我們稱之爲宏\title[2]。這裏就是我希望能夠輸入:

<div class="latex">\[ a^2 + b^2 = \title{c}{'hypotenuse'}^2 \]</div> 

這裏就是我希望它輸出:

<div class="latex" title="\[ a^2 + b^2 = \title{c}{'hypotenuse'}^2 \]"> 
    <div class="MathJax_Display">a2+b2=<span title="hypotenuse">c</span>2</div> <!-- prettyprint --> 
</div> 

如果發生這種情況,誰在數學懸停在c用戶將獲得一個提示說「斜邊」,但是將鼠標懸停在數學的任何其他領域並獲得原始輸入。

這裏是我的算法的思想:

//pseudo-code: 
given the TeX input '\title{mathstr}{titlestr}': 
    var thespan = document.createElement('span'); 
    $(thespan).attr('title', titlestr).html(mathstr); 
    somehow put this into the MJ output at the right place 

回答

1

爲什麼不直接使用action擴展,定義\texttip\mathtip用於連接工具提示子表達式?詳情請參閱MathJax documentation

+0

這個宏的缺點是它是用JavaScript編寫的,而不是HTML,所以(1)JS禁用(並且仍然能夠看到原始TeX輸入)的用戶將無法看到工具提示,並且(2)嵌套'\ mathtip'命令導致UNDERlapping,不重疊。換句話說,JS將顯示最外層跨度的工具提示。另一方面,HTML'title'屬性將會OVERlap,意味着顯示最內層的元素的工具提示。我接受你的答案,因爲它是正確的,但它不能解決我的問題:( – chharvey

+0

我只是想出了這個......使用'\ mathtip'使用JS來創建工具提示框,這是不利的,所以沒有必要嵌套它們但''texttip'實際上在HTML中創建了'title'屬性,所以它們就像普通的工具提示一樣,它們重疊,即使使用'\('和'\)''分隔符,否則它們會變成冒名頂尖工具提示 – chharvey

+0

嵌套的'\ mathtip'調用對我來說工作正常。您使用的是什麼瀏覽器/操作系統? –