3

Часто, во время разговора или по электронной почте, или на форуме, я хотел бы набрать немного математики, но мне не нужна полная поддержка уравнений. Символы Юникода должны быть достаточными.

Что мне нужно, так это простой способ набирать математические символы Юникода. Поскольку я уже знаю латекс, имеет смысл использовать мнемонику латексных символов для ввода математических символов.

В настоящее время я написал сценарий AutoHotKey, который автоматически заменяет \latexSymbol на соответствующий символ Unicode, используя функции AutoHotKey "hotstrings". Однако, горячие строки AutoHotKey оказались нестабильными для многих строк. Наличие пары десятков строк приведет к тому, что AHK не сможет распознавать строки время от времени.

Любое другое решение? (Нет, Alt+ номер юникода недостаточно удобен)

Прилагается мой скрипт 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

6 ответов6

3

Я использую букмарклет 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();
});
0

Если мне это нужно, я просто набираю математику в Word и копирую / вставляю. Word использует те же макросы, которые LaTeX использует по умолчанию, и автоматически преобразует их в надлежащий Unicode. И я нахожу линейный формат там более читабельным, чем разметка LaTeX.

Тем не менее, если ваши почтовые получатели читают с какого-то тупого терминала или без надлежащей поддержки шрифтов (возможно, на XP), вы, вероятно, захотите просто набрать raw LaTeX вместо Unicode, чтобы они могли понять, что вы хотите сказать.

0

Autohotkey-скрипт для преобразования LaTeX-подобного ввода в символы юникода

«Ctrl +Alt +Shift +U» включает и выключает его (посмотрите на правый нижний значок, чтобы увидеть, что он находится в режиме ожидания (значок S) в активном режиме (значок H).

Тест: αβΓ∞¹₂ℝ

0

Мне нравится использовать программный пакет для ввода символов из языков с нелатинскими символами, таких как китайский. Например, в Sogou пиньинь можно определить строки, которые будут другими строками символов Юникода. Затем при наборе текста я быстро переключаюсь на китайский, пишу alpha , выбираю α из списка предложений и молча переключаюсь на свой исходный язык ввода. Это действительно удобно!

0

Вы можете использовать MSKLC для создания математической раскладки клавиатуры. Например, eurokb включает такие символы, как ≡≤ ≠ ± ∔π∜ в комбинациях мертвых клавиш AltGr. (Eurokb, вероятно, не достаточно математичен для вас, но он может дать вам некоторые идеи.)

-2

Напечатайте короткий фрагмент LaTeX и попросите его разрезать и вставить его в http://www.numberempire.com/texequationeditor/equationeditor.php и нажать "Render". Пример:

\begin{align*}
R_s &\;=\; \frac{\widehat{\sigma}_s}{K} \left(\sqrt{1 - \sum^{15}_{k=1} \beta_k^2} \right) G_s
\quad.
\\
& \text{Parlez-vous Fran{\c c}ais? Czy mo\.zna u\.zy\'c tego?}
\\
& \mathbb{Z}_2 \oplus \mathbb{Z}_3 \cdots \oplus \mathbb{Z}_p,  
\end{align*}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .