Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

85
Vistas
¿Puedo configurar MathJax para la coincidencia inteligente?

¿Puedo indicar a MathJax que acepte más de un par de delimitadores básicos?

Fondo

Estoy usando el delimitador en línea del signo de dólar para representar matemáticas en un navegador.

Esto causa problemas para texto como 500$ + 200$ que coincide con la sintaxis de MathJax y se representa como matemática. El enfoque comúnmente recomendado para evitar que el contenido no matemático se represente como matemático es habilitar processEscapes .

 MathJax = { tex: { inlineMath: [ ["$", "$"] ], processEscapes: true, }, };

Problema

El método de escape requiere reescribir todo el contenido que no sea sintaxis matemática. Los 500$ + 200$ anteriores se convierten en 500\$ + 200\$ . Esta no es una solución ideal donde la mayoría del contenido no es muy matemático. Es peor cuando el contenido tiene mucho código.

Este es un problema de codificación que preferiría no transmitir a los autores de contenido.

Una mejora simple será esperar que todo el contenido matemático en línea esté $tidy like this$ , donde no hay espacios en blanco alrededor de la expresión. Obsidian y posiblemente otros editores de rebajas parecen estar siguiendo este patrón a pesar de que todavía tiene algunas trampas.

 // This doesn't work, is there a similar approach that works? inlineMath: [ [/\$(?=[^\s])/, /(?<=[^\s])\$/] ]

De hecho, esta es la expresión delimitadora que uso para habilitar/deshabilitar la representación matemática en una página, según lo recomendado por MathJax. El problema ocurre en contenido mixto donde MathJax analiza toda la página.

Lo que he probado/considerado

1. Utilice el conjunto de delimitadores [" $", "$ "], [" $", "$"], ["$", "$ "]
  • Esto no funciona.
  • Esto consume los espacios alrededor de la expresión. Se pueden volver a agregar con CSS.
  • Hay bastantes casos extremos en los que el orden del contenido delimitado y el orden de ejecución determinarán lo que elegirá el analizador.
2. Analice el contenido yo mismo, envíe cada expresión coincidente a MathJax por separado
  • Esto funciona.
  • ¿Hay un analizador ya construido para esto?
3. Agregue barras de escape sobre la marcha
  • Esto funciona.
  • ¿Existe algo que haga esto en la compilación, el servidor o el navegador?
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Aquí hay una configuración que le permitirá especificar patrones para los delimitadores que proporcione (mientras sigue manejando delimitadores donde no proporciona patrones). Los patrones deben coincidir con los delimitadores dados en las dos primeras entradas de la matriz, pero ese es el caso de su situación, por lo que no debería ser un problema para usted. (Sería posible una solución más general, pero requeriría más trabajo que no necesitaba).

 MathJax = { tex: { inlineMath: [ ['$', '$', /\$(?=[^\s])/, /(?<=[^\s])\$/], // adds two extra parameters for pattern to use ['\\(', '\\)'] ] }, startup: { ready() { const {FindTeX} = MathJax._.input.tex.FindTeX; const {selectOptionsFromKeys} = MathJax._.util.Options; // // Subclass the FindTeX class to handle the delimiter patterns // class myFindTeX extends FindTeX { addPattern(starts, delims, display) { let [open, close, start, end] = delims; // // If the extra patterns are given... // if (start && end) { // // The patterns are expected as strings, so convert RegExp to strings without surrounding / // starts.push(start.toString().slice(1).replace(/\/$/, '')); this.end[open] = [close, display, this.endPattern(null, end.toString().slice(1).replace(/\/$/, ''))]; } else { // // Otherwise do the usual delimiter handling // super.addPattern(starts, delims, display); } } } // // Make an instance of our FindTeX subclass (with the configured options) // and tell the TeX input jax to use our subclass // const options = selectOptionsFromKeys(MathJax.config.tex, myFindTeX.OPTIONS); MathJax.config.tex.FindTeX = new myFindTeX(options); MathJax.startup.defaultReady(); } } };

Aquí, creamos una subclase de la clase FindTeX y anulamos el método que guarda los datos para la coincidencia de delimitadores. Comprueba si se proporcionan los patrones y, de ser así, los utiliza para la coincidencia de patrones en lugar de las cadenas originales (aunque todavía se necesitan para que el delimitador de apertura pueda ubicar la información del delimitador de cierre y para que sea adecuado). procesamiento de delimitador cerrado).

Creo que esto hará lo que estás buscando. Podría convertirse en una extensión más formal, pero dado que es relativamente corto, puede usarlo de esta manera con bastante facilidad.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda