html - sheet - rmarkdown titles
¿Cómo puedo mezclar LaTeX con Markdown? (15)
¿Has probado con Pandoc ?
He estado usando Markdown para notas de clase, y es genial. Incluso hago algunos preprocesamientos en Markdown para poder hacer cosas como tablas. Pero este trimestre estoy enseñando una clase con mucha matemática, 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 podría incluir en mi Markdown a través de la etiqueta HTML <img>
. Pero no tengo ni idea de cómo tomar un fragmento de LaTeX y obtener una buena imagen que
- Tiene el cuadro delimitador correcto
- Está antialiased
Todo lo que sé hacer es obtener páginas completas en formatos DVI, PostScript o PDF.
Estoy seguro de que se ha resuelto este problema, pero no he podido adivinar los términos de búsqueda correctos. ¿Alguna sugerencia sobre cómo solucionarlo o dónde buscar una solución existente?
EDITAR : Después de haber instalado MathTeX, puedo decir que el código es inflexible, que viola el estándar de jerarquía del sistema de archivos de Linux, y que es un trabajo amateur, tanto en los sentidos buenos como malos 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 había estado esperando, pero estoy cojeando en un guión de mi propia invención. Resulta que en lugar de dvipng
es un poco más fácil usar dvips -E
y el programa de convert
de ImageMagick. Los beneficios son un poco más de control de cosas como la escala y la facilidad de hacer un fondo transparente. Los curiosos pueden inspeccionar este ejemplo .
No puedo recomendar esta solución a nadie. Pero tampoco puedo recomendar MathTeX.
Agregue el siguiente código al principio de sus archivos de 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="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></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 usar 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 lugar de pandoc canónica, pero lo anterior aún es útil.
Es posible analizar Markdown en Lua utilizando el código Lunamark (consulte su Repo Github ), lo que significa que Markdown puede ser analizado directamente por macros en Luatex y admite la conversión a muchos de los formatos admitidos por Pandoc (es decir, la biblioteca es adecuada para usar en lualatex
, context
, Metafun, Plain Luatex y texlua
scripts).
El proyecto fue iniciado por John MacFarlane , autor de Pandoc, y el desarrollo de la herramienta rastrea el de Pandoc bastante de cerca y es de calidad similar (es decir, excelente).
Khaled Hosny escribió un módulo de Contexto, proporcionando soporte macro conveniente. La respuesta de Michal al ¿Hay algún paquete con soporte Markdown? La pregunta proporciona un código que proporciona un soporte similar para Latex.
Estaba buscando exactamente lo mismo cuando encontré teqhtml . Realiza la conversión de ecuaciones $ y $$ a imágenes con la ventaja de alinear la imagen resultante verticalmente con el texto circundante. No es un montón de doc, pero es bastante sencillo.
Espero que ayude a algunos lectores futuros.
Me encontré con esta discusión solo ahora, así que espero que mi comentario aún sea útil. Estoy involucrado con MathJax y, por la forma en que entiendo su situación, creo que sería una buena manera de resolver el problema: deje su código LaTeX tal como está, y deje que MathJax represente las matemáticas al momento de verlas.
¿Hay alguna razón por la que preferirías las imágenes?
Oye, esta podría no ser la solución más ideal, pero funciona para mí. Terminé creando una extensión LaTeX de Python-Markdown.
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 usará latex / dvipng para generar pngs para las respectivas ecuaciones / texto y luego base64 codificará los datos para alinear las imágenes directamente, en lugar de tener imágenes externas.
Los datos se colocan en un archivo de caché delimitado simple que codifica la expresión a 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 una salida detallada, pero eso realmente no es un problema ya que ya está usando Markdown :)
Perdón por despertar un hilo muy viejo, pero he estado usando jemdoc por un par de años y es realmente excelente.
Puede encontrar útil a mimeTeX .
Qué idioma estás usando?
Si puede usar ruby, entonces maruku se puede configurar para procesar las matemáticas usando varios convertidores latex-> MathML. Instiki usa esto. También es posible extender PHPMarkdown para usar itex2MML y convertir matemáticamente. Básicamente, inserte pasos adicionales en el motor de reducción en los puntos apropiados.
Entonces con Ruby y PHP, esto está hecho. Supongo que estas soluciones también podrían adaptarse a otros idiomas: obtuve la extensión itex2MML para producir enlaces perl también.
Responderé tu pregunta con una contra pregunta ...
¿Qué piensas de Org-mode? No es tan puro como Markdown, pero es similar a Markdown, y me parece fácil trabajar con él, y permite la incorporación de Latex. Cf. http://www.gnu.org/software/emacs/manual/html_node/org/Embedded-LaTeX.html
Posdata
En caso de que no haya observado org-mode, tiene una gran fortaleza como un "lenguaje de marcado natural" de propósito general sobre Markdown, es decir, su tratamiento de tablas. La fuente:
| 1 | 0 | 0 | | -1 | 1 | 0 | | -1 | -1 | 1 |
representa exactamente lo que crees que será ...
Y el látex se procesa en piezas usando preview-latex de tex-mode.
deberías mirar en multimarkdown http://fletcherpenney.net/multimarkdown/
tiene soporte para metadatos (encabezados, palabras clave, fecha, autor, etc.), tablas, asciimath, mathml, hell. Estoy seguro de que puedes pegar el código de matemáticas latex allí mismo. Básicamente es una extensión de la marca para agregar todas estas otras funciones muy útiles. Utiliza XSLT, por lo que puede actualizar fácilmente sus propios estilos de LaTeX y convertirlo directamente. Lo uso todo el tiempo, y me gusta mucho.
Deseo que el descuento solo incorpore 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.
kramdown hace exactamente lo que describes:
https://kramdown.gettalong.org/syntax.html#math-blocks
Y es mucho más confiable y bien definido que Markdown.
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 etiquetas de imagen apropiadas para una secuencia de comandos mimetex.cgi . Tomó todos los 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, debe definir el CSS apropiado para las imágenes .block y .inline ...
RStudio tiene un IDE libre bueno que permite Markdown y LaTeX.