2011-01-25 37 views
5

Tengo un par de proyectos de código en C++/Python en los que las etiquetas y descripciones de formato LaTeX se usan para generar documentación en PDF o gráficos creados con LaTeX + pstricks. Sin embargo, también tenemos algunas salidas de texto sin formato, como una versión HTML de la documentación (ya tengo el código para escribir marcas mínimas para eso) y un representador de gráficos no compatible con TeX.Conversión/análisis programático de código LaTeX a texto sin formato

Para estos me gustaría eliminar el marcado de TeX que es necesario, p. representando unidades físicas. Esto incluye espacios sin interrupción (delgados), \ text, \ mathrm, etc. También sería bueno analizar cosas como \ frac {# 1} {# 2} en # 1/# 2 para la salida de texto sin formato (y usa MathJax para el HTML). Debido al sistema que tenemos en este momento, necesito poder hacer esto desde Python, es decir, idealmente Estoy buscando un paquete Python, pero un ejecutable que no sea Python al que pueda llamar desde Python y atrapar la cadena de salida también estaría bien.

Conozco el similar question on the TeX StackExchange site, pero no había ninguna solución realmente programática: he visto detex, plasTeX y pytex, que parecen todos un poco muertos y realmente no hacen lo que yo necesidad: conversión programática de una cadena TeX a una cadena representativa de texto plano.

Podría intentar escribir un analizador TeX básico utilizando, p. pyparsing, pero a) que podría estar lleno de trampas y se podría apreciar la ayuda, yb) seguramente alguien lo había intentado antes, o sabe de una forma de conectarse con TeX para obtener un mejor resultado.

Actualización: Gracias por todas las respuestas ... de hecho parece ser un poco incómodo. Puedo arreglármelas con menos análisis generales de LaTeX, pero la razón para considerar un analizador en lugar de una carga de expresiones regulares en un bucle es que quiero ser capaz de manejar macros anidadas y macros multi-arg muy bien, y obtener el paréntesis hacer coincidir para que funcione correctamente. Entonces puedo, por ejemplo, reduzca las macros irrelevantes de texto como \ text y \ mathrm primero, y maneje las relevantes para txt como \ frac last ... incluso con los paréntesis apropiados. Bueno, puedo soñar ... por ahora las expresiones regulares no están haciendo un trabajo tan terrible.

+0

Tienes razón, la piratería de TeX es una cosa brutal, pero otros han hecho algunos progresos con esto. matplotlib contiene un analizador TeX de pyparsing que quizás puedas doblar para tu propósito. También podría intentar publicar en la lista de correos de pyparsing y ver si algunos de los que han trabajado en TeX en el pasado podrían ayudar. – PaulMcG

+0

Ver http://stackoverflow.com/questions/3610551/math-in-restructuredtext-with-latex. –

+0

Gracias: Miraré primero en matplotlib ... eso también es una dependencia preexistente para uno de mis paquetes, así que, si tengo suerte, ¡puedo usarlo a través de la API mpl! Cheers :) – andybuckley

Respuesta

1

Trate detex (incluido con la mayoría de las distribuciones de TeX *), o la versión mejorada: http://code.google.com/p/opendetex/

Editar: Oh, ya veo que ha intentado ya DETEX. Aún así, opendetex podría funcionar para usted.

+0

No había visto opendetex antes - se ve mucho mejor, y tal vez su analizador se puede enganchar y extender para hacer cosas más estructuradas con comandos en modo matemático. Gracias. – andybuckley

-1

descripciones látex de formato y etiquetas se utilizan para generar la documentación PDF o gráficos hechos de látex + pstricks

Ésta es su error. No deberías haber hecho eso.

Utilice RST o algún otro lenguaje de marcado mejor.

Use Docutils para crear LaTeX y HTML a partir de la fuente RST.

+4

¡Gracias por sus comentarios! Sin embargo, no es un error: el software es para uso en física académica y utilizamos LaTeX para su análisis/representación matemática; probablemente el 50% o más del texto codificado sea matemático y la salida que se puede usar sin problemas (LaTeX-prepared) publicaciones. Así que, aunque estoy de acuerdo, sí. RST en casos dominados por texto donde no se requiere un control muy detallado sobre el formateo, este caso de uso es más o menos lo contrario y LaTeX se adapta mucho mejor a la aplicación y a la comunidad de usuarios. Es incómodo hacer cosas flexibles con eso ... – andybuckley

+0

@andybuckley: RST admite matemáticas LaTeX. Lo he usado Prefiero el soporte en sphinx (http://sphinx.pocoo.org/). Consulte esta pregunta relacionada http://stackoverflow.com/questions/3610551/math-in-restructuredtext-with-latex para obtener más consejos útiles. –

+0

@andybuckley: "No es un error". Si no funciona, tiene que haber un error en alguna parte. Si no hay ningún error, debe funcionar perfectamente. Si funciona perfectamente, ¿por qué hacer una pregunta? –

1

Como está considerando usar TeX para hacer el renderizado, sospecho que el rendimiento no es un problema. En este caso, tiene un par de opciones: dvi2txt para recuperar el texto de un solo archivo dvi (prepárese para generar uno para cada etiqueta) o incluso para convertir dvi en imágenes de trama, si está bien para usted, así es como hevea o latex2html trata las fórmulas.

+0

Gracias por los comentarios. En realidad, tenemos miles de etiquetas para analizar (esto se optimiza un poco para la generación de gráficos, y nos gustaría acelerarlo un poco más). Pero los documentos LaTeX muy simples pueden procesarse aceptablemente rápido, y varias etiquetas en un documento TeX podrían ser procesables, lo intentaré. AFAIK es probable que el tiempo de inicio de LaTeX domine en este caso, por lo que algo como el daemon LaTeX que se ha trabajado en PyTeX sería útil ... ¡si tan solo ese proyecto estuviera vivo! – andybuckley

1

Quisiera probar pandoc [ingrese la descripción del enlace aquí] [1]. Está escrito en Haskell, pero es un conversor muy bueno de latex 2.

[1]: http://johnmacfarlane.net/pandoc/index.html.

+1

Desearía que estar en Haskell no fuera un problema, pero lo es: ¡Realmente no puedo distribuir código que dependa de un programa no estándar y usuarios con un compilador Haskell!Por lo que puedo decir, no hay enlaces reales de Python-Haskell, lo cual no es un asesino, pero no ayuda :) Aunque lo usaré en privado, ¡gracias! – andybuckley

3

Una palabra de advertencia: es mucho más difícil escribir un analizador completo para TeX simple que lo que podría pensar. El comando TeX-level (no LaTeX) \def realmente extiende la sintaxis de TeX. Por ejemplo, \def\foo #1.{{\bf #1}} ampliará \foo goo. en goo - ¡Observe que el punto se convirtió en un delimitador para la macro foo! Por lo tanto, si tiene que tratar con cualquier forma de TeX, sin restricciones sobre qué paquetes se pueden usar, no se recomienda confiar en el análisis simple. Usted necesita una representación de TeX. catdvi es lo que uso, aunque no es perfecto.

+1

Puedo arreglar con un análisis menos general que eso, pero gracias por el recordatorio! Puedo restringir el uso a un subconjunto más razonable de LaTeX: la razón para considerar un analizador en lugar de una carga de expresiones regulares en un ciclo es que quiero ser capaz de manejar macros anidadas y macros multi-arg muy bien, y obtener el abrazadera mathing para trabajar correctamente. Entonces puedo, por ejemplo, reduzca las macros irrelevantes de texto como \ text y \ mathrm primero, y maneje las relevantes para txt como \ frac last ... incluso con los paréntesis apropiados. – andybuckley

0

Construyendo la otra publicación Eduardo Leoni, estaba mirando a pandoc y veo que viene con un ejecutable independiente pero también en this page que promete una manera de construir una biblioteca de sistema C-invocable. Quizás esto es algo con lo que puedes vivir?

Cuestiones relacionadas