Saltar al contenido
Editores web
NeoMath Web

Editores web

Integra NeoMath Web con TipTap, CKEditor 5 o cualquier página con Web Components y la API JavaScript, con ecuaciones y química editables con doble clic.

En esta página

Los plugins oficiales traen los dos productos, la ecuación (NeoMath) y la química (NeoChem). Cada uno se convierte en una imagen en el texto. El doble clic reabre el editor correcto y actualiza la imagen en el propio editor.

TipTap#

JavaScript
import { Editor, Node, mergeAttributes } from "@tiptap/core";
import StarterKit from "@tiptap/starter-kit";
import { criarExtensoesTipTap } from "./adaptadores/tiptap.js";

const { NeoMath, NeoChem } = criarExtensoesTipTap({ Node, mergeAttributes });
const editor = new Editor({ element, extensions: [StarterKit, NeoMath, NeoChem] });

editor.commands.inserirNeoMath();
editor.commands.inserirNeoChem("H2SO4");
Comando Qué hace
inserirNeoMath(latex?) / inserirNeoChem(texto?) abre el diálogo e inserta en el cursor
adicionarNeoMath(resultado) / adicionarNeoChem(resultado) inserta un resultado ya generado, sin diálogo
editarNeoMath() / editarNeoChem() reabre el diálogo para el nodo seleccionado

Opciones de cada nodo: HTMLAttributes y editarComDuploClique (predeterminado true). getText() devuelve el LaTeX o el texto químico.

CKEditor 5#

JavaScript
import * as CK from "ckeditor5";
import { criarPluginsCKEditor5 } from "./adaptadores/ckeditor5.js";

const { NeoMath, NeoChem } = criarPluginsCKEditor5(CK);
ClassicEditor.create(el, {
  plugins: [CK.Essentials, CK.Paragraph, NeoMath, NeoChem],
  toolbar: ["neomath", "neochem"],
});

Los botones neomath y neochem ejecutan los comandos del mismo nombre: editor.execute("neomath"), o editor.execute("neochem", { resultado }) para insertar sin diálogo.

Web Components#

Cuatro elementos HTML con Shadow DOM: el CSS del sitio no cambia las ecuaciones y el CSS de ellas no se filtra al sitio.

HTML
<script type="module" src="/neo/componentes/index.js"></script>

<neo-math latex="\frac{a}{b}"></neo-math>
<neo-chem texto="2H2 + O2 -> 2H2O"></neo-chem>
<neo-chem modo="balancear" texto="Fe + O2 -> Fe2O3"></neo-chem>

<form>
  <neo-math-editor name="resposta" value="x^2"></neo-math-editor>
  <neo-chem-editor name="reacao" placeholder="Haz clic para escribir la reacción"></neo-chem-editor>
</form>
Elemento Atributos Eventos
<neo-math> latex (o el contenido), cor, formato (svg o png), escala neo-desenhado, neo-erro
<neo-chem> texto (o el contenido), modo (auto, balancear, bohr), cor, formato, escala neo-desenhado, neo-erro
<neo-math-editor> value, name, placeholder, disabled input, change
<neo-chem-editor> value, name, placeholder, disabled input, change

Los editores son campos de formulario de verdad: el valor (LaTeX o texto químico) entra en el FormData, el reset vuelve al value inicial y disabled vale también por el <fieldset>. El clic o Enter abre el diálogo.

Para personalizar: ::part(imagem), ::part(erro), ::part(campo), ::part(dica) y las variables --neo-foco, --neo-borda, --neo-fundo, --neo-texto, --neo-raio y --neo-erro.

API JavaScript#

Para editores sin plugin oficial, la API global NeoMath hace el trabajo:

JavaScript
const r = await NeoMath.gerarImagem("e^{i\\pi}+1=0", { formato: "svg" });
if (r.ok) document.querySelector("#saida").append(NeoMath.aplicarNoImg(r));

NeoMath.inserir((img) => editor.insertNode(img), { latex: "x^2" });

const parar = NeoMath.vigiar(document.querySelector("#conteudo"), {
  aoAtualizar: (img, resultado) => salvar(),
});
Función Qué hace
pronta() se resuelve cuando el editor está cargado
gerarImagem(latex, opcoes?) / gerarImagens(lista) genera SVG o PNG con ancho, alto, línea base, LaTeX y MathML
latexParaMathml(latex) / mathmlParaLatex(mathml) conversiones de texto
inserir(aoInserir, { latex? }) abre el diálogo y devuelve la imagen lista
editar(img, aoAtualizar?) reabre una imagen de NeoMath
vigiar(raiz, opcoes?) el doble clic en cualquier ecuación dentro de raiz abre la edición
usarPredefinicao(p) aplica un ajuste de fuentes
baixar(r, nome?) descarga la imagen generada

Para química, NeoChem.gerarImagem(texto), NeoChem.balancear(texto), NeoChem.bohr(elemento) y NeoChem.inserir(aoInserir, { texto, aba }) siguen el mismo patrón.

Configuración#

NeoMath.config acepta formato (svg o png), cor, escala, pngEscala, idioma, tema (auto, claro o escuro), separadorMilhar y separadorDecimal.