Substituindo látex por símbolos unicode

3

Muitas vezes, durante uma conversa, e-mail ou fórum, gostaria de digitar algumas contas, mas não preciso de suporte completo para equações. Símbolos Unicode devem ser suficientes.

O que eu preciso é uma maneira fácil de digitar símbolos unicode relacionados a matemática. Como já conheço o látex, faz sentido usar os mnemônicos de símbolos de látex para digitar os símbolos matemáticos.

O que eu fiz atualmente é escrever um script AutoHotKey que substitua automaticamente o \ latexSymbol pelo símbolo unicode correspondente, usando os arquivos "hotstrings" AutoHotKey. No entanto, os hotstrings AutoHotKey mostraram-se instáveis para muitas cadeias de caracteres. Ter um par de dezenas de linhas faria com que o AHK falhasse no reconhecimento das strings de tempos em tempos.

Alguma outra solução? (Não, Alt + número unicode não é conveniente o suficiente)

Anexado é o meu script AHK. A função PutUni foi retirada de aqui .

::\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
    
por Elazar Leibovich 03.01.2010 / 14:37

6 respostas

3

Eu uso um bookmarklet javascript para digitar símbolos unicode em math.stackexchange.com. O Mathjax renderiza a maioria dos unicode da mesma forma que as macros de látex correspondentes. Por exemplo, $ℝ$ e $\mathbb{R}$ fornecem o mesmo resultado. Eu gosto da maneira como o código tex fica mais compacto e legível com símbolos unicode.

Eu acho que esse código é capaz de fazer o que você quiser. Não gosto de usar muitos pressionamentos de teclas, então, em vez de \alpha , uso \a para produzir α . Você pode modificar esse script de acordo com suas próprias necessidades e, em seguida, convertê-lo em um bookmarklet, usando este site, por exemplo: link

Se você quiser usar esse script em um site sem jquery, primeiro será necessário executar este bookmarklet: link

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();
});
    
por 01.11.2013 / 05:43
0

Se eu precisar, apenas tento digitar a matemática no Word e copiar / colar. O Word usa as mesmas macros que o LaTeX usa por padrão e as converte automaticamente em Unicode apropriado. E eu acho o formato linear lá mais legível que a marcação LaTeX.

Ainda assim, se seus destinatários lerem de algum terminal idiota ou sem o suporte de fonte apropriado (no XP talvez), você provavelmente desejará apenas digitar LaTeX em vez de Unicode apenas para permitir que eles entendam o que você quer dizer.

    
por 03.01.2010 / 15:01
0

Você pode usar MSKLC para crie um layout de teclado centrado em matemática. Por exemplo, eurokb inclui símbolos como ≡≤ ≠ ± ∔π∜ em combinações de teclas inativas AltGr. (O eurokb provavelmente não é muito pesado para você, mas pode lhe dar algumas idéias.)

    
por 03.01.2010 / 23:44
0

Eu gosto de usar um pacote de software para inserir caracteres de idiomas com caracteres não latinos, como chinês. Em, por exemplo, Sogou pinyin pode-se definir strings para serem outras strings de caracteres Unicode. Então, ao digitar, mudo rapidamente para o chinês, escrevo alpha , escolho α da lista de sugestões e mudo silenciosamente para o meu idioma de entrada original. Isso é realmente conveniente!

    
por 26.06.2014 / 17:29
0

Auto-chave-script para converter entradas semelhantes a LaTeX para caracteres unicode

"Ctrl + Alt + Shift + U" liga e desliga (veja no ícone inferior direito para ver se está no modo suspense (ícone S) do modo ativo (ícone H).

Teste: αβΓ∞¹₂ℝ

    
por 11.11.2017 / 23:53
-2

Digite um pequeno fragmento LaTeX e diga-lhes para recortar e colar no link e pressione "Render" . Exemplo:

\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*}
    
por 25.03.2010 / 06:15