Я использую букмарклет javascript для ввода символов юникода на math.stackexchange.com. Mathjax отображает большинство юникодов так же, как и соответствующие латексные макросы. Например, $ℝ$
и $\mathbb{R}$
дают одинаковый результат. Мне нравится, как текстовый код остается более компактным и читаемым с помощью символов Юникода.
Я думаю, что этот код может делать то, что вы хотите. Мне нравится использовать не слишком много нажатий клавиш, поэтому вместо \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();
});