¿Cómo puedo mezclar LaTeX con Markdown? [cerrado]


181

He estado usando Markdown para las notas de clase, y es genial. Incluso hago un preprocesamiento en Markdown para poder hacer cosas como tablas. Pero este término estoy enseñando una clase con muchas matemáticas, y me encantaría poder poner fórmulas LaTeX con Markdown, algo como esto:

The refinement relation is written $a \sqsubseteq b$, which can be 
pronounced "$a$ approximates $b$" or "$b$ is at least as defined as $a$".

Me gustaría poder tomar cada fragmento de LaTeX y preprocesarlo en un buen archivo PNG antialias que luego podría incluir en mi Markdown a través de la <img>etiqueta HTML . Pero no tengo ni idea de cómo tomar un fragmento de LaTeX y obtener una buena imagen que

  • Tiene el cuadro delimitador correcto
  • Es antialias

Todo lo que sé hacer es obtener páginas completas en formatos DVI, PostScript o PDF.

Estoy seguro de que este problema se ha solucionado, pero no he podido adivinar los términos de búsqueda correctos. ¿Alguna sugerencia sobre cómo resolverlo o dónde buscar una solución existente?


EDITAR : Después de instalar mathTeX, puedo decir que el código es inflexible, que viola el estándar de la Jerarquía del sistema de archivos de Linux y que es un trabajo de aficionados, tanto en el sentido bueno como en el malo de esa palabra. El código es tan complejo que no hay fallas obvias. Estaré buscando alternativas.

Además, está claro que, en el fondo, las soluciones se basan en dvipng.


UN AÑO MÁS TARDE : Nunca obtuve la integración perfecta que esperaba, pero estoy cojeando en un guión de mi propio diseño. Resulta que en lugar de dvipngeso es un poco más fácil de usar dvips -Ey el convertprograma de ImageMagick. Los beneficios son un poco más de control de cosas como la escala y la facilidad de crear un fondo transparente. Los curiosos pueden inspeccionar este ejemplo .

No puedo recomendar esta solución a nadie. Pero tampoco puedo recomendar MathTeX.


Buena pregunta. He hecho mi preparación directamente en LaTeX, pero es un poco prolijo para ese propósito, incluso utilizando auctex ...
dmckee --- ex-moderador gatito

66
¿Intentaste con Pandoc? No solo convierte Markdown + LaTeX a (lo que sea), sino que también, con su última versión, te permite escribir scripts que funcionan en el árbol de análisis, para que puedas hacer fácilmente lo que quieras.
ShreevatsaR

@ShreevatsaR Voy a probar tanto pandoc como multimarkdown, probablemente este verano.
Norman Ramsey

44
tan complejo que no hay fallas obvias : me perdí esta agradable referencia la primera vez que la leí.
Charles Stewart

66
¿Alguien puede explicar cómo esta pregunta está fuera de tema?
AnnanFay

Respuestas:




25

Agregue el siguiente código en la parte superior de sus archivos Markdown para obtener compatibilidad con la representación de MathJax

<style TYPE="text/css">
code.has-jax {font: inherit; font-size: 100%; background: inherit; border: inherit;}
</style>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
    tex2jax: {
        inlineMath: [['$','$'], ['\\(','\\)']],
        skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'] // removed 'code' entry
    }
});
MathJax.Hub.Queue(function() {
    var all = MathJax.Hub.getAllJax(), i;
    for(i = 0; i < all.length; i += 1) {
        all[i].SourceElement().parentNode.className += ' has-jax';
    }
});
</script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-AMS_HTML-full"></script>

y luego `$ x ^ 2 $` o `$$ x ^ 2 $$` se mostrarán como se esperaba :-)

Siempre puede instalar una versión local de MathJax si no desea utilizar la distribución en línea, pero es posible que deba alojarla a través de un servidor web local.

ACTUALIZACIÓN : en estos días solo uso pandoc en lugar de la rebaja canónica, pero lo anterior sigue siendo útil.


Nota del futuro: cdn.mathjax.org se acerca al final de su vida útil, consulte mathjax.org/cdn-shutting-down para obtener sugerencias de migración (y quizás actualice su publicación para futuros lectores).
Peter Krautzberger

12

Contestaré tu pregunta con una contrapregunta ...

¿Qué opinas del modo Org? No es tan puro como Markdown, pero es similar a Markdown, y me resulta fácil trabajar con él, y permite incrustar Latex. Cf. http://www.gnu.org/software/emacs/manual/html_node/org/Embedded-LaTeX.html

Posdata

En caso de que no haya visto el modo org, tiene una gran fuerza como un "lenguaje de marcado natural" de propósito general sobre Markdown, es decir, su tratamiento de tablas. La fuente:

El | 1 | 0 | 0 |
El | -1 | 1 | 0 |
El | -1 | -1 | 1 |

representa justo lo que crees que será ...

Y el Latex se renderiza en pedazos usando el latex preview del modo tex.


1
Miré el modo org, y aunque el LaTeX incorporado parece estar muy bien hecho, parece una exageración total para lo que quiero (típico de emacs). Curiosamente, noto que el motor de renderizado subyacente es nuevamente dvipng. El problema de la tabla es importante, pero ya he escrito un preprocesador para resolverlo :-) +1
Norman Ramsey

8

deberías mirar multimarkdown http://fletcherpenney.net/multimarkdown/

tiene soporte para metadatos (encabezados, palabras clave, fecha, autor, etc.), tablas, asciimath, mathml, demonios, estoy seguro de que puede pegar el código matemático de látex allí mismo. Básicamente es una extensión de Markdown para agregar todas estas otras características muy útiles. Utiliza XSLT, por lo que puede crear fácilmente sus propios estilos LaTeX y convertirlos directamente. Lo uso todo el tiempo y me gusta mucho.

Desearía que la rebaja solo incorporase multimarkdown. Sería bastante agradable.

Editar : Multimarkdown producirá html, latex y algunos otros formatos. HTML puede venir con una hoja de estilo de su elección. también se convertirá en MathML, que se muestra en Firefox y Safari / Chrome, si no recuerdo mal.


Parece más complicado de lo que quiero, y no está claro cuál es el poder expresivo (aparte de que MathML se incorpora por referencia0).
Norman Ramsey




3

Oye, esta podría no ser la solución más ideal, pero funciona para mí. Terminé creando una extensión Python-Markdown LaTeX.

https://github.com/justinvh/Markdown-LaTeX

Agrega soporte para expresiones matemáticas y de texto en línea usando una sintaxis $ math $ y% text%. La extensión es un preprocesador que utilizará latex / dvipng para generar pngs para las ecuaciones / texto respectivas y luego codificará base64 los datos para alinear las imágenes directamente, en lugar de tener imágenes externas.

Luego, los datos se colocan en un archivo de caché delimitado simple que codifica la expresión en la representación de base64. Esto limita la cantidad de veces que se debe ejecutar el látex.

Aquí hay un ejemplo:

%Hello, world!% This is regular text, but this: $y = mx + b$ is not.

La salida:

$ markdown -x latex test.markdown
<p><img class='latex-inline math-false' alt='Hello, world!' id='Helloworld' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFwAAAAQBAMAAABpWwV8AAAAMFBMVEX///8iIiK6urpUVFTu7u6YmJgQEBDc3NxERESqqqqIiIgyMjJ2dnZmZmbMzMwAAAAbX03YAAAAAXRSTlMAQObYZgAAAVpJREFUKM9jYICDOgb2BwzYAVji8AQg8fb/PZ79u4AMvv0Mrz/gUA6W8F7AmcLAsJuBYT7Y1PcMfLiUgyWYF/B8Z2DYAVReABKrZ2DHpZwdopzrA0nKOeHKj66CKOcKPQJWwJo2NVFhfwCQyymhYwCUYD0avIApgYFh2927/QUcE3gDwMpvMhRCDJzNMIPhKZg7UW8DUOIMg9sCPgGo6e8ZODeAlAP9xLEArNy/IIwhAMx9D3IM+3cgi70BqnxZaNQFkHJWAQbeBrByjgURExaAuc9AyjnB5hjAlEO9ygVXzrplpskEMPchQvkBmGMcGApgjjkAVs7yhyWVAcwFK2f/AlJeAI0m5gMsEK+aMhQ6aDuA1DcDIZirBg7IOwxlB5g2QBJBF8OZVUz95hqfC3hOXWGYrwBSHskwk4EByGXab8QAlOBaGizFKYAtUlgUGEgBTCSpZnDCLQUA+y6MXeYnPDgAAAAASUVORK5CYII='> This is regular text, but this: <img class='latex-inline math-true' alt='y = mx + b' id='ymxb' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFIAAAAOBAMAAABOTlYkAAAAMFBMVEX///9ERETu7u4yMjK6urp2dnZUVFSIiIjMzMwQEBDc3NwiIiJmZmaYmJiqqqoAAADS00rKAAAAAXRSTlMAQObYZgAAAOtJREFUKM9jYCAACsCk4wYGgiABTLInEKuS+QGxKvkVGBj47jBwI8tcffI84e45BoZ7GVcLECo9751iWLeSoRPITBQEggMMDBy9sxj2MDgz8DIE8yCpPMxwjWFBGUMMkpFcbAEMvxjKGLgYxIE8NkHBiYIyQMY+hmoGhi0Mdsi2czawbGCQBTJ+ILvzE0MaA9MHIIWwnWE9A+sBpk8LGDgmMCnAVXJNYPgCJHhRQvUiA/cDXoECZx4DXoSZTBtYgaaEPw5AVnkOGBRc5xTcbsReQrL9+nWwyxbgC88DcJZ+QygDcYD1+QPiFAIAtLA8KPZOGFEAAAAASUVORK5CYII='> is not.</p>

Como puede ver, es un resultado detallado, pero eso realmente no es un problema ya que ya está usando Markdown :)


2

sí, pero tendrás que hackearlo un poco tú mismo. He escrito un filtro que reemplaza las etiquetas de látex $\some\inline\latex$o $$\some\equation$$con las etiquetas de imagen apropiadas para un script mimetex.cgi . Me llevó 5 minutos.

Advertencia: espectacularmente feo ...

#!/usr/bin/env python
import sys, markdown,re

MIMETEX_LOC="http://some.server.com/cgi-bin/mimetex.cgi"

def sanitizeLatex(text):
    return re.sub(r"\\",r"%5C", text)

def wrapLatexBlock(text):
    return '<img alt="equation" class="block" src="%s?%s"></img>'%(MIMETEX_LOC,text)

def wrapLatexInline(text):
    return '<img alt="equation" class="inline" src="%s?%s"></img>'%(MIMETEX_LOC,text)

def prepLatexBlock(matchobj):
    return wrapLatexBlock(sanitizeLatex(matchobj.group()[2:-2]))

def prepLatexInline(matchobj):
    return wrapLatexInline(sanitizeLatex(matchobj.group()[1:-1]))


if __name__ == "__main__":
    # initialise markdown
    md=markdown.Markdown()
    raw_md=open(sys.argv[1],"r").read()

    ##
    # deal with embedded latex
    ##
    raw_md=re.sub(r'\$\$(.*?)\$\$',prepLatexBlock, raw_md)
    raw_md=re.sub(r'\$(.*?)\$',prepLatexInline, raw_md)

    ##
    # once latex is parsed, convert md to html
    ##
    main_html=md.convert(raw_md)

    # hey presto!
    print(main_html)

Por supuesto, usted mismo debe definir el CSS apropiado para las imágenes .block e .inline ...


2

Me encontré con esta discusión solo ahora, así que espero que mi comentario siga siendo útil. Estoy involucrado con MathJax y, por cómo entiendo su situación, creo que sería una buena manera de resolver el problema: deja su código LaTeX como está y deja que MathJax represente las matemáticas al verlas.

¿Hay alguna razón por la que prefieras imágenes?


1
Ciertos sitios de Stack Exchange Math.Se, Physics.SE, etc. , usan MathJax ahora, aunque la posición de la administración es que MathJax es demasiado pesado para implementarlo, excepto donde sea absolutamente necesario. Pero eso no se aplica a las presentaciones, ya que requiere que las obras se ejecuten en un navegador.
dmckee --- ex-gatito moderador

1

Qué idioma estás usando?

Si puede usar ruby, entonces se puede configurar maruku para procesar matemáticas usando varios convertidores de látex-> MathML. Instiki usa esto. También es posible extender PHPMarkdown para usar itex2MML y convertir las matemáticas. Básicamente, inserta pasos adicionales en el motor Markdown en los puntos apropiados.

Entonces, con ruby ​​y PHP, esto se hace. Supongo que estas soluciones también podrían adaptarse a otros idiomas: también obtuve la extensión itex2MML para producir enlaces perl.


1

Estaba buscando exactamente lo mismo cuando encontré teqhtml . Realiza la conversión de ecuaciones $ y $$ a imágenes con la ventaja adicional de alinear la imagen resultante verticalmente con el texto circundante. No hay muchos documentos, pero es bastante sencillo.

Espero que ayude a algunos futuros lectores.


1

Lamento despertar un hilo muy antiguo, pero he estado usando jemdoc durante un par de años y es realmente excelente.


1

Es posible analizar Markdown en Lua usando el código Lunamark (vea su repositorio de Github ), lo que significa que Markdown puede ser analizado directamente por macros en Luatex y admite la conversión a muchos de los formatos compatibles con Pandoc (es decir, la biblioteca es muy adecuada para usar en lualatex, contextMetafun, Plain Luatex y texluascripts).

El proyecto fue iniciado por John MacFarlane , autor de Pandoc, y el desarrollo de la herramienta sigue de cerca el de Pandoc y es de una calidad similar (es decir, excelente).

Khaled Hosny escribió un módulo de Contexto, proporcionando un soporte macro conveniente. La respuesta de Michal a ¿Hay algún paquete con soporte Markdown? La pregunta proporciona un código que proporciona soporte similar para Latex.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.