Я использую букмарклет javascript для ввода символов юникода на math.stackexchange.com. Mathjax отображает большинство Unicode так же, как соответствующие латексные макросы. Например $ℝ$
и $\mathbb$
дать такой же результат. Мне нравится, как текстовый код остается более компактным и читаемым с помощью символов Юникода.
Я думаю, что этот код может делать то, что вы хотите. Мне нравится использовать не слишком много нажатий клавиш, поэтому вместо того, чтобы \alpha
использовать \a
для производства α
. Вы можете изменить этот сценарий в соответствии со своими потребностями, а затем преобразовать его в букмарклет, используя этот веб-сайт, например: http://jasonmillerdesign.com/Free_Stuff/Instant_Bookmarklet_Converter
Если вы хотите использовать этот скрипт на веб-сайте без jquery, сначала вам нужно запустить этот букмарклет: http://www.learningjquery.com/2006/12/jquerify-bookmarklet/
jQuery.fn.autocorrect = function(options) { if ("text" != jQuery(this).attr("type") && !jQuery(this).is("textarea")) { return; } var defaults = { corrections: { a: "α", b: "β", c: "γ", d: "δ", e: "ϵ", emp : "∅", f: "\\frac{}{}", in : "∈", s: "σ", t: "\\text{}", tau : "τ", th : "θ", p: "π", pm : "±", o : "ω", O : "Ω", r : "ρ", A : "∀", E : "∃", R: "ℝ", C: "ℂ", H: "ℍ", N: "ℕ", Q: "ℚ", Z: "ℤ", int: "\\int_{}^{}", inf : "∞", sum : "\\sum_{}^{}", "-1": "^{-1}", ph: "ϕ", ch: "χ", ps: "ψ", leq : "≥", xi : "ξ", geq : "≤", "/=" : "≠", "==" : "≡", "<" : "\\langle {} \\rangle", "->" : "→", "=>" : "⇒", "<=" : "⇐", "<>" : "⇔", "sq" : "\\sqrt{}" } }; if (options && options.corrections) { options.corrections = jQuery.extend(defaults.corrections, options.corrections); } var opts = jQuery.extend(defaults, options); getCaretPosition = function(oField) { var iCaretPos = 0; if (document.selection) { var oSel = document.selection.createRange(); oSel.moveStart("character", 0 - oField.value.length); iCaretPos = oSel.text.length; } else if (oField.selectionStart || oField.selectionStart == "0") { iCaretPos = oField.selectionStart; } return (iCaretPos); } function setCaretPosition (oField, iCaretPos) { if (document.selection) { var oSel = document.selection.createRange(); oSel.moveStart("character", 0 - oField.value.length); oSel.moveStart("character", iCaretPos); oSel.moveEnd("character", 0); } else if (oField.selectionStart || oField.selectionStart == "0") { oField.selectionStart = iCaretPos; oField.selectionEnd = iCaretPos; } } this.keyup(function(e) { if (32 != e.keyCode) { return; } var caretPosition = (getCaretPosition(this) - 1); if (1 > caretPosition) { return; } var valueOfField = this.value; var stringUptoCaretPosition = (valueOfField).substr(0, caretPosition); if (" " == stringUptoCaretPosition.charAt(caretPosition - 1)) { return; } var beginIndex = stringUptoCaretPosition.lastIndexOf('\\'); if (beginIndex < stringUptoCaretPosition.lastIndexOf(' ')) { return; } var stringToSearch = stringUptoCaretPosition.substring(beginIndex+1); var stringNotToSearch = stringUptoCaretPosition.substring(0, beginIndex); if (!opts.corrections[stringToSearch]) { return; } var stringToReplace = opts.corrections[stringToSearch]; stringUptoCaretPosition = stringNotToSearch+ stringToReplace; var stringFromCaretPositionUptoEnd = (valueOfField).substr(caretPosition+1); this.value = (stringUptoCaretPosition + stringFromCaretPositionUptoEnd); if (stringToReplace.indexOf("{}")!=-1 ) { setCaretPosition(this, stringUptoCaretPosition.indexOf("{}")+1); } else { setCaretPosition(this, stringUptoCaretPosition.length);} }); }; $(document).ready(function() { $("textarea").autocorrect(); });