通常,在对话、电子邮件或论坛中,我想输入一些数学运算,但不需要完整的方程式支持。Unicode 符号就足够了。
我需要一种简单的方法来输入与数学相关的 Unicode 符号。由于我已经了解 LaTeX,因此使用 LaTeX 符号助记符来输入数学符号是合理的。
我目前所做的是编写一个 AutoHotkey 脚本,\使用 AutoHotkey 功能自动将 LaTeX 符号名称前面的 替换为相应的 Unicode 符号hotstring
。但是,AutoHotkey 热字符串对于许多字符串来说都不稳定。几十行代码有时会导致 AHK 无法识别字符串。
还有其他解决方案吗?(没有,Alt+(Unicode number)不够方便。)
附件是我的 AHK 脚本。该PutUni
函数取自这里。
::\infty::
PutUni("e2889e")
return
::\sum::
PutUni("e28891")
return
::\int::
PutUni("e288ab")
return
::\pm::
PutUni("c2b1")
return
::\alpha::
PutUni("c991")
return
::\beta::
PutUni("c992")
return
::\phi::
PutUni("c9b8")
return
::\delta::
PutUni("ceb4")
return
::\pi::
PutUni("cf80")
return
::\omega::
PutUni("cf89")
return
::\in::
PutUni("e28888")
return
::\notin::
PutUni("e28889")
return
::\iff::
PutUni("e28794")
return
::\leq::
PutUni("e289a4")
return
::\geq::
PutUni("e289a5")
return
::\sqrt::
PutUni("e2889a")
return
::\neq::
PutUni("e289a0")
return
::\subset::
PutUni("e28a82")
return
::\nsubset::
PutUni("e28a84")
return
::\nsubseteq::
PutUni("e28a88")
return
::\subseteq::
PutUni("e28a86")
return
::\prod::
PutUni("e2888f")
return
::\N::
PutUni("e28495")
return
答案1
我使用 javascript 书签小工具在 math.stackexchange.com 上输入 unicode 符号。Mathjax 将大多数 unicode 渲染为与相应的 latex 宏相同。例如,$ℝ$
并$\mathbb{R}$
给出相同的结果。我喜欢 tex 代码使用 unicode 符号保持更紧凑和可读的方式。
我认为此代码可以满足您的要求。我喜欢使用较少的按键,因此\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();
});
答案2
Autohotkey 脚本用于将类似 LaTeX 的输入转换为 Unicode 字符
“Ctrl+Alt+Shift+U”可打开或关闭它(查看右下角的图标可看到它处于暂停模式(图标 S)或活动模式(图标 H)。
测试:αβΓ∞¹₂ℝ
答案3
如果需要,我只需在 Word 中输入数学公式并复制/粘贴即可。Word 默认使用与 LaTeX 相同的宏,并自动将其转换为正确的 Unicode。我发现那里的线性格式比 LaTeX 标记更具可读性。
不过,如果您的邮件收件人从某些哑终端阅读或没有适当的字体支持(可能是在 XP 上),您可能只想输入原始 LaTeX 而不是 Unicode,以便他们了解您想说的内容。
答案4
我喜欢使用软件包来输入非拉丁字符的语言,比如中文。例如,搜狗拼音可以将字符串定义为其他 Unicode 字符的字符串。然后,在打字时,我快速切换到中文,输入alpha
,α
从建议列表中选择,然后默默切换回我原来的输入语言。这真的很方便!