math - best - Matemáticas en ReStructuredText con LaTeX
markdown editor linux (12)
Me gustaría utilizar un lenguaje de marcado ligero para tomar notas en mis clases de la universidad.
Mi editor de elección es gedit, y encontré reStructuredText Tools para Gedit , que ejecutará el procesador reStructuredText y representará el HTML en un panel en gedit. Esto es genial, y el 80% del camino hasta allí.
Pero para muchas de mis clases necesito incluir ecuaciones matemáticas o caracteres griegos en mis notas. Aunque no estoy muy familiarizado con LaTeX, tengo entendido que tiene estas capacidades.
¿Cómo puedo usar LaTeX en un documento reST? ¿El documento reST debe procesarse en LaTeX, luego debe procesarse en HTML o existe una forma mejor? ¿Haría esto más fácil? Puedo modificar el plugin gedit si es necesario.
Por último, ¿alguien hace esto? ¿Alguna otra sugerencia para tomar notas de clase en un editor de texto plano?
¡Gracias!
Descomponiendo un poco su problema, el primer objetivo es obtener la salida del código de látex palabra por palabra (excepto cgi-escapes para <,>, etch.) En el html generado a partir de su marcado de luz de elección: una vez que lo tiene allí, puede ser fácilmente modificado por mathJax (altamente recomendado) o itex como lo menciona Gozzilli.
En primer lugar, debería decir que utilizar Remark en lugar de ReST probablemente sería más fácil porque ReST usa / para escaparse, por lo que todo LaTeX debe estar protegido. Para ver un ejemplo de qué tan bien funcionan las cosas con markdown y mathJax , ve a jugar con la configuración en mathoverflow.net .
Sin embargo, supondré que realmente desea ReST (y mathJax), en cuyo caso hay dos formas de hacerlo: use stock ReST (y escape engorroso), o agregue algunos manejadores LaTeX a docutils.
Opción 1 - Stock ReST:
Para matemática en línea, simplemente use literalmente más cualquier etiqueta que su postprocesador esté buscando: `` $ x </ pi $ ``. Para matemáticas de varias líneas, quiere un bloque literal, pero necesita establecer un atributo de clase para, por ejemplo, MathJaX para analizarlo, ya que de lo contrario omite etiquetas <pre>
:
.. class:: mathjax_process
::
/begin{equation}
x</pi
/end{equation}
Opción 2: Extienda su procesador ReST
Si está dispuesto a hacer un poco de hacking para extender su procesador ReST, puede obtener una notación mucho más agradable para los literales LaTeX, definiendo un role texto interpretado personalizado para el látex en línea (por ejemplo :latex:`x</pi`
) y una directive personalizada para matemáticas de líneas múltiples, por ejemplo
.. latex::
/begin{equation}
x</pi
/end{equation}
La notación matemática en línea incluso puede acortarse a `x</pi`
si usa default-role .
Hay varias formas de implementar el rol y la directiva. He llegado a (aproximadamente) lo siguiente que tiene la característica agradable que (a diferencia de la mayoría de los otros hacks que he visto) se degrada a código literal LaTex para escritores sin procesamiento de post integrado.
from docutils import nodes, utils
from docutils.parsers.rst import directives, Directive
class Latex(Directive):
""" Latex directive to display LaTeX as escaped literal wrapped in
<pre class="latex">.
"""
required_arguments = 0
optional_arguments = 0
has_content = True
def run(self):
self.assert_has_content()
prenode=nodes.literal_block(self.block_text,
''/n''.join(self.content),
classes=[''latex''])
return [prenode]
directives.register_directive(''latex'', Latex)
def latex_role(role, rawtext, text, lineno, inliner, options={}, content=[]):
node = nodes.literal(rawtext,
''/(%s/)''%utils.unescape(text, 1),
classes=[''latex''])
return [node],[]
register_local_role(''latex'', latex_role)
Lo anterior utilizará la clase "látex" para marcar cosas para procesar, por lo que deberá configurar mathJax o equivalente para buscar esta clase. Alternativamente, cambie el código anterior para configurar la clase en "mathjax_process", que es la clase de anulación mathJax predeterminada.
Desde la versión 0.8 es compatible de forma nativa: ya no deberías usar ninguna solución alternativa. La sintaxis es también muy simple. Es lo mismo que las matemáticas de látex, pero sin el $$
adjunto
Entonces, simplemente puede escribir lo siguiente para un bloque matemático
.. math::
/frac{ /sum_{t=0}^{N}f(t,k) }{N}
O si quieres escribir en línea, puedes usar esto:
:math:`/frac{ /sum_{t=0}^{N}f(t,k) }{N}`
nota los trazos de delimitación allí.
ACTUALIZAR:
en versiones más nuevas, parece ser necesario usar una doble barra invertida para los elementos matemáticos, por lo que es //frac
y no /frac
El problema es que reST realmente no tiene complementos. Puede elegir un marco extensible como Sphinx ; un plugin para JSMath ya está incluido, y un plugin para mathJax también es posible. Además, Sphinx hace uso de LaTeX para construir directamente documentos PDF.
Otra solución más liviana consiste en editar la plantilla reST para incluir MathJax para que pueda usar la sintaxis de MathJax (similar a LaTeX) en el documento.
Pero, por lo general, solo uso LaTeX directamente para cualquier cosa grave: las capacidades de personalización de estos lenguajes de marcado livianos simplemente no son lo suficientemente completas para todo.
En lugar de rst2html usa rst2mathml.py .
Extiende docutils con un modo latex-math. El contenido de este modo se convierte a MathML.
Esto es lo que hago:
Agregue un rol para las matemáticas al comienzo de su documento reST:
.. role:: raw-math(raw) :format: latex html
Escribe tus matemáticas como
:raw-math:`$$ /frac{s}{/sqrt{N}} $$`
(use
$$ ... $$
si lo quiere en un bloque, o$ ... $
si lo quiere en línea).Genera resultados html como este:
rst2html --stylesheet=/path/to/my_beautiful_stylesheet.css my_file.rst / | tidy -q | /path/to/itex2MML > my_file.xhtml
Esto genera el html con
rst2html
,rst2html
contidy
y luego convierte las matemáticas de latex en MathML conitex2MML
,itex2MML
en un archivo xhtml.
Notas:
- La hoja de estilo es opcional
- Para itex2MML ve here .
- La extensión de su archivo html debe ser xhtml o xml; de lo contrario, las matemáticas no se mostrarán en su navegador.
Existe soporte nativo para un rol y una directiva "matemática" (usando la sintaxis de entrada de LaTex) desde la Versión 0.8 (07/07/2011).
La extensión de descuento de Pandoc permite en línea o mostrar matemáticas LaTeX; simplemente póngalo entre los signos de dólar (inmediatamente adyacentes) como los siguientes: $ / sqrt {-1} $ y se trata como usted espera. Uso esta función todo el tiempo, y no creo que sea poco práctica. Consulte el manual http://johnmacfarlane.net/pandoc/README.html#math
Una vez que se analiza el descuento, pandoc puede escribir HTML, LaTeX, ReST, RTF, DocBook, ODT, páginas de manual, etc., etc. Si un contexto matemático de LaTeX no incluye sofisticados paquetes de LaTeX, incluso puede analizar las matemáticas en MathML, por lo que se procesa de inmediato en HTML o RTF. (Proporciona una cantidad de opciones para manejar las matemáticas LaTeX en documentos que no son de LaTeX).
Pandoc también analiza ReST (y HTML, y no demasiado sofisticado LaTeX). Tenía la esperanza de dar una solución que involucrara al lector ReSt, pero parece no tener una maquinaria especial para manejar las matemáticas; vea la discusión del número 249 http://code.google.com/p/pandoc/issues/detail?id=249 Voy a estudiar de nuevo más de cerca para ver.
No creo que nadie haya inventado un plugin de Pandoc para Gedit todavía (hay una asistencia elaborada en emacs y en TextMate, lo sé) - ¡eso sería increíble!
LaTeX y ReST son dos soluciones para el mismo problema (marcado de todo el documento), y no estoy seguro de que uno sea feliz viviendo dentro del otro.
- LaTeX primero, luego ReST: LaTeX necesita ubicar elementos tipográficos con precisión para diseñar ecuaciones (y todo lo demás). ReST no tomaría la salida LaTeX (PostScript o similar) como entrada.
- ReST primero, luego LaTeX: Tendría que escribir un formateador de salida para ReST que genere código LaTeX, y definir extensiones en ReST para evitar que malinterprete sus ecuaciones u otro TeX explícito. Su salida de LaTeX seguirá siendo algo parecido a PostScript o PDF.
He visto un código para usar un subconjunto de TeX para generar una ecuación gráfica que luego se extrae en HTML o similar (por ejemplo, la macro LaTeX Formula de Trac ), que puede ser la mejor solución disponible.
Para ampliar las respuestas anteriores, así es como conseguí que MathJax trabajara con ReST y Docutils , sin necesidad de utilizar LaTeX:
Use matemática estilo LaTeX dentro de mi fuente ReST, como:
The radar backscatter coefficient is $/sigma^0$.
Incluya esto en algún lugar dentro del archivo (pongo el mío en la parte inferior):
.. raw:: html <script type="text/x-mathjax-config"> MathJax.Hub.Config({ extensions: ["tex2jax.js"], jax: ["input/TeX", "output/HTML-CSS"], tex2jax: { inlineMath: [ [''$'',''$''], ["//(","//)"] ], displayMath: [ [''$$'',''$$''], ["//[","//]"] ], processEscapes: true }, "HTML-CSS": { availableFonts: ["TeX"] } }); </script> <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
Convertir a HTML:
rst2html report.rst report.html
Cargue el HTML en un navegador moderno. El script MathJax se descarga y se aplica al HTML al visualizarlo. ¡Todo se ve genial para mí!
¡Muchas gracias a http://www.thales.math.uqam.ca/~labbes/Sage/rst2sws/ por la ayuda!
ACTUALIZACIÓN: noté que aunque el HTML de salida funciona bien en Firefox, MathJax tarda mucho tiempo en operar en Chrome y luego da un error. Lo arreglé cambiando la fuente del script en la última línea de
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
a
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"
.
Creo que la razón es que FireFox es compatible con MathML, Chrome (Webkit, realmente) aún no (al menos no del todo, puedes probar el soporte de tu navegador here ).
Como no necesito MathML, solo TeX, utilizo la versión MathJax correspondiente y ahora se carga rápidamente en Chrome sin ningún error. Además, sería mucho más rápido escribir el estilo matemático TeX que el estilo MathML.
Sugeriría NoTex : tiene soporte integrado de rST usando LaTex solo para material de presentación y ecuaciones matemáticas. Por ejemplo, en NoTex escribirías primero una sustitución rST como
.. |E=mc²| replace:: :math:`E = mc ^ 2`
y luego simplemente use |E=mc²|
donde lo necesitas; NoTex utiliza LaTex para traducirlo a algo que se parece a E=mc²
(sin los símbolos de pipa que indican las sustituciones de rST) y se representa de forma similar en HTML utilizando MathJax.
Tenga en cuenta que la versión 0.8 de docutils (que analiza reStructuredText) tiene soporte para matemática LaTeX. Ver http://article.gmane.org/gmane.text.docutils.user/6255 para muchos ejemplos. Las opciones para la opción "--math-output" son: MathML, HTML, MathJax y LaTeX.
Este elemento de las preguntas frecuentes de Docutils describe una forma de incluir de manera relativamente fácil las matemáticas de TeX. Primero define un rol para el texto interpretado que pasa la ecuación directamente a LaTeX:
.. role:: raw-latex(raw)
:format: latex
Entonces puedes usar esa función en tu texto
The area of a circle is :raw-latex:`$/pi r^2$`
La entrada de preguntas frecuentes también menciona algunas otras formas de hacerlo, incluido un enfoque de preprocesador que se puede utilizar para representar las matemáticas en una imagen al generar HTML.