Autohotkey 脚本用于将类似 LaTeX 的输入转换为 Unicode 字符

Autohotkey 脚本用于将类似 LaTeX 的输入转换为 Unicode 字符

通常,在对话、电子邮件或论坛中,我想输入一些数学运算,但不需要完整的方程式支持。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α从建议列表中选择,然后默默切换回我原来的输入语言。这真的很方便!

相关内容