2011-01-25 21 views
5

C++/Python'da LaTeX biçimindeki açıklamaların ve etiketlerin PDF belgelerini veya LaTeX + pstricks kullanılarak yapılan grafikleri oluşturmak için kullanıldığı birkaç kod projem var. Bununla birlikte, belgelerin bir HTML sürümü gibi bazı düz metin çıktılarımız da var (bunun için minimum düzeyde işaretleme kodum var) ve TeX özellikli olmayan bir arsa oluşturucu.Program aracılığıyla LaTeX kodunu düz metne dönüştürme/ayrıştırma

Bunlar için gerekli olan TeX işaretlemesini ortadan kaldırmak istiyorum. fiziksel birimleri temsil eder. Bu, kesilmeyen (ince) boşluklar, \ metin, \ mathrm vb. Içerir. Düz metin çıktısı için \ frac {# 1} {# 2} gibi # #/# 2 gibi öğelerin ayrıştırılması da iyi olur (ve HTML için MathJax kullanın). Şu anda sahip olduğumuz sistem sayesinde, Python'dan, yani ideally bir Python paketi arıyorum, Python'dan arayabileceğiniz Python olmayan bir çalıştırılabilir dosyayı kullanabiliyorum. Çıkış dizesi yakalamak da iyi olurdu.

similar question on the TeX StackExchange site10'un farkındayım, ancak bunun için gerçekten programatik bir çözüm yoktu: Ben bunların hepsi biraz ölü gibi gözüktüğü detex, plasTeX ve pytex'e baktım ve gerçekten ne yapmadım ihtiyaç: bir TeX dizesinin temsili düz metin dizesine programlı dönüşümü.

Örnek olarak, temel bir TeX çözümleyicisi yazmayı deneyebilirim. pıhtılaşma, ama a) tuzak yüklü olabilir ve yardım takdir edilecektir ve b) kesinlikle daha önce bir kişi bunu denedi ya da daha iyi bir sonuç elde etmek için TeX'in kendisini kancalamak için bir yol biliyor mu?

Güncelleme: Tüm cevaplar için teşekkürler ... gerçekten biraz garip bir istek gibi görünüyor! LaTeX'in genel ayrıştırma işleminden daha azını yapabilirim, ancak bir döngüdeki bir normal ifadenin yerine bir ayrıştırıcıyı düşünmenin sebebi, iç içe geçmiş makroları ve çok değişkenli makroları güzel bir şekilde ele alıp düzgün çalışmak için eşleme. Sonra ben ör. \ text ve \ mathrm gibi txt'le alakasız makroları ilk olarak azaltın ve \ frac gibi txt ile alakalı olanları işleyin ... hatta uygun parantezlerle bile! Şey, hayal edebiliyorum ... şimdilik rüyalar bu kadar korkunç bir iş yapmıyor.

+0

Haklısınız, TeX'in pıhtılaşması acımasız bir şeydir, ancak diğerleri bununla biraz yol kat etmişlerdir. matplotlib, amacınıza belki de eğebileceğiniz bir pyparsing TeX ayrıştırıcısı içerir. Ayrıca, pyparsing posta listesine posta göndermeyi deneyebilir ve geçmişte TeX'i yapmış olanlardan bazılarının yardım edip edemeyeceğini görebilirsiniz. – PaulMcG

+0

Bkz. Http://stackoverflow.com/questions/3610551/math-in-restructuredtext-with-latex. –

+0

Teşekkürler: Ben matplotlib'de ilk bakacağım ... bu da benim paketlerimden birinin önceden var olan bağımlılığı olacak, bu yüzden eğer şanslıysam, mpl API'si aracılığıyla kullanabilirim! Şerefe :) – andybuckley

cevap

1

(çoğu * TeX dağıtımı ile birlikte gelen) detex deneyin veya geliştirilmiş versiyonu: http://code.google.com/p/opendetex/

Düzenleme: oh, zaten Detex çalıştı görüyoruz. Yine de, opendetex sizin için çalışabilir.

+0

Daha önce opendetex'i görmemiştim - çok daha iyi görünüyor, ve belki de ayrıştırıcıları matematik modunda komutlar ile daha yapılı şeyler yapabilmek için uzatılabilir. Teşekkürler. – andybuckley

-1

LaTeX formatlı açıklamaları ve etiketler Bu hatadır

LateX'i + PSTricks kullanılarak yapılmış PDF belgelerine veya grafikler oluşturmak için kullanılır. Bunu yapmamalıydın.

RST veya başka bir - daha iyi biçimlendirme dili kullanın.

RST kaynağından LaTeX ve HTML oluşturmak için Docutils kullanın.

+4

Yorumlarınız için teşekkür ederiz! Bu bir hata değil, - yazılım akademik fizikte kullanmak içindir ve matematik ayrıştırma/oluşturma için LaTeX'i kullanırız - muhtemelen kodlanmış metnin% 50'si veya fazlası matematiktir - ve çıktı olarak sorunsuz bir şekilde kullanılabilir (LaTeX hazır) yayınlar. Bu yüzden ben de aynı fikirdeyim. Biçimlendirmeye ilişkin çok ayrıntılı denetimin gerekmediği metin hakim durumlarında RST, bu kullanım durumu oldukça zıttır ve LaTeX uygulama ve kullanıcı topluluğuna çok daha iyi uymaktadır. Bununla esnek şeyler yapmak çok garip ... – andybuckley

+0

@andybuckley: RST, LaTeX matematiğini destekliyor. Onu kullandım. Sfenks desteğini tercih ederim (http://sphinx.pocoo.org/). Daha fazla bilgi için http://stackoverflow.com/questions/3610551/math-in-restructuredtext-with-latex adresine bakın. –

+0

@andybuckley: "Bu bir hata değil". Eğer işe yaramazsa, bir yerlerde bir yanlışlık olmalı. Eğer bir hata yoksa, mükemmel bir şekilde çalışması gerekir. Mükemmel çalışıyorsa, neden bir soru soruyorsunuz? –

1

Görüntülemeyi yapmak için TeX'in kendisini kullanmayı düşündüğünüzden, performansın bir sorun olmadığını düşünüyorum. Bu durumda birkaç seçeneğiniz vardır: dvi2txt metninizi tek bir dvi dosyasından almak (her etiket için bir tane oluşturmak için hazırlanmak) veya raster görüntülere dvi oluşturmak, eğer sizin için uygunsa, bu nasıl hevea veya latx2html formülleri ele alır.

+0

Yorumlar için teşekkürler. Aslında, ayrıştırmak için binlerce etiketimiz var (bu, arsa üretimi için biraz optimize edildi ve biraz daha hızlandırmak istiyoruz). Ancak çok basit LaTeX belgeleri kabul edilebilir hızlı işleyebilir ve bir TeX belgesine birkaç etiket sığdırmak mümkün olabilir - Ben bir adım atacağım. AFAIK, LaTeX'in başlangıç ​​zamanının bu durumda hakim olması muhtemeldir, bu yüzden PyTeX'te çalışmış olan LaTeX daemon gibi bir şey yararlı olurdu ... eğer bu proje hala hayatta olsa bile! – andybuckley

1

pandoc'u deneyebilirim [bağlantı tanımını buraya girin] [1]. Haskell'de yazılmıştır, ancak dönüştürücü ne olursa olsun gerçekten güzel bir lateks 2'dir.

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

+1

Haskell'de olmanın bir sorun olmamasını diliyorum, ama: Standart olmayan bir programa ve bir Haskell derleyicisine sahip olan kullanıcılara dayanan kodları gerçekten dağıtamıyorum!Anlayabildiğim kadarıyla gerçek bir Python-Haskell bağlaması yok, ya da bir katil değil ama yardımcı değil :) Ben özel olarak kullanacağım - teşekkürler! – andybuckley

3

Dikkatli olun: Düz TeX için tam çözümleyici yazmaktan çok daha zordur. TeX düzeyi (LaTeX değil) \def komutu aslında TeX'in sözdizimini genişletir. Örneğin, \def\foo #1.{{\bf #1}}, \foo goo. ürününü goo içine genişletecektir - Noktanın foo makrosu için bir sınırlayıcı olduğuna dikkat edin! Bu nedenle, no'lu formu ile ilgilenmeniz gerekiyorsa, hangi paketlerin kullanılabileceği konusunda herhangi bir kısıtlama olmaksızın, basit ayrıştırmalara dayanmanız tavsiye edilmez. TeX görüntülemeye ihtiyacınız var. Mükemmel olmamasına rağmen catdvi kullanıyorum.

+1

Bundan daha az genel ayrıştırma ile yapabilirim, ama hatırlatma için teşekkürler! Kullanımı LaTeX'in daha makul bir alt kümesiyle kısıtlayabilirim - bir döngüdeki bir normal ifadenin yerine bir ayrıştırıcıyı düşünmenin sebebi, iç içe geçmiş makroları ve çok değişkenli makroları iyi bir şekilde işlemek ve düzgün çalışması için brace matematik. Sonra ben ör. \ text ve \ mathrm gibi txt'le alakasız makroları ilk olarak azaltın ve \ frac gibi txt ile alakalı olanları işleyin ... hatta uygun parantezlerle bile! – andybuckley

0

Diğer postayı inşa etmek Eduardo Leoni, pandoc'a bakıyordum ve bunun tek başına çalıştırılabilir bir dosyayla birlikte geldiğini görüyorum ama this page da C-callable sistem kütüphanesi oluşturmanın bir yolunu vaat ediyor. Belki bu yaşayabileceğiniz bir şey mi?

İlgili konular