2011-01-25 30 views
5

Tôi có một vài dự án mã bằng C++/Python, trong đó mô tả và nhãn định dạng LaTeX được sử dụng để tạo tài liệu PDF hoặc đồ thị được tạo bằng LaTeX + pstricks. Tuy nhiên, chúng tôi cũng có một số kết quả đầu ra văn bản thuần túy, chẳng hạn như phiên bản HTML của tài liệu (tôi đã có mã để viết đánh dấu tối thiểu cho điều đó) và biểu đồ kết xuất đồ họa không có TeX.Mã LaTeX chuyển đổi/phân tích cú pháp thành văn bản thuần túy

Đối với những điều này, tôi muốn loại bỏ đánh dấu TeX cần thiết cho ví dụ: đại diện cho các đơn vị vật lý. Điều này bao gồm các không gian (không) mỏng, \ text, \ mathrm vv Nó cũng sẽ được tốt đẹp để phân tích những thứ như \ frac {# 1} {# 2} thành # 1/# 2 cho đầu ra văn bản thuần (và sử dụng MathJax cho HTML). Do hệ thống mà chúng tôi đã có vào lúc này, tôi cần có khả năng thực hiện điều này từ Python, tức là lý tưởng Tôi đang tìm gói Python, nhưng thực thi không phải Python mà tôi có thể gọi từ Python và bắt chuỗi đầu ra cũng sẽ ổn.

Tôi biết về similar question on the TeX StackExchange site, nhưng không có giải pháp thực sự có lập trình cho điều đó: Tôi đã xem xét detex, plasTeX và pytex, tất cả đều có vẻ hơi chết và không thực sự làm những gì tôi cần: chuyển đổi chương trình của chuỗi TeX thành chuỗi văn bản thuần đại diện.

Tôi có thể thử viết một trình phân tích cú pháp TeX cơ bản bằng cách sử dụng ví dụ: pyparsing, nhưng a) mà có thể là pitfall-laden và giúp đỡ sẽ được đánh giá cao và b) chắc chắn ai đó đã thử rằng trước đây, hoặc biết một cách để móc vào TeX chính nó để có được một kết quả tốt hơn?

Cập nhật: Cảm ơn tất cả các câu trả lời ... nó thực sự dường như là một chút yêu cầu khó xử! Tôi có thể làm ít hơn phân tích cú pháp chung của LaTeX, nhưng lý do xem xét một trình phân tích cú pháp thay vì tải các regex trong một vòng lặp là tôi muốn có thể xử lý macro lồng nhau và macro đa arg một cách độc đáo và có được cú đúp phù hợp để hoạt động đúng. Sau đó, tôi có thể giảm các macro txt-không liên quan như \ text và \ mathrm trước, và xử lý những thứ có liên quan đến txt như \ frac last ... có thể ngay cả với các dấu ngoặc đơn thích hợp! À, tôi có thể mơ ... bây giờ các regex không làm một công việc khủng khiếp như vậy.

+0

Bạn đúng, pyparsing của TeX là một điều tàn bạo, nhưng những người khác đã thực hiện một số tiến triển với điều này. matplotlib chứa một trình phân tích cú pháp TeX pyparsing mà bạn có thể uốn cong theo mục đích của mình. Bạn cũng có thể thử đăng bài trên danh sách thư pyparsing và xem liệu một số người đã thực hiện công việc TeX trong quá khứ có thể giúp đỡ hay không. – PaulMcG

+0

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

+0

Cảm ơn: Tôi sẽ xem xét đầu tiên trong matplotlib ... đó cũng là một sự phụ thuộc từ trước cho một trong các gói của tôi, vì vậy nếu tôi _very_ may mắn tôi có thể sử dụng nó thông qua API mpl! Chúc mừng :) – andybuckley

Trả lời

1

Hãy thử detex (vận chuyển với hầu hết các bản phân phối * TeX), hoặc phiên bản cải tiến: http://code.google.com/p/opendetex/

Chỉnh sửa: oh, tôi thấy bạn đã cố gắng DETEX rồi. Tuy nhiên, opendetex có thể làm việc cho bạn.

+0

Tôi chưa từng thấy opendetex trước đây - có vẻ tốt hơn nhiều, và có thể trình phân tích cú pháp của họ có thể được nối vào và mở rộng để làm những thứ có cấu trúc hơn với các lệnh trong chế độ toán học. Cảm ơn. – andybuckley

-1

LaTeX định dạng mô tả và nhãn được sử dụng để tạo ra tài liệu PDF hoặc đồ thị khiến sử dụng LaTeX + pstricks

Đây là sai lầm của bạn. Bạn không nên làm điều đó.

Sử dụng RST hoặc một số ngôn ngữ khác - đánh dấu tốt hơn.

Sử dụng Docutils để tạo LaTeX và HTML từ nguồn RST.

+4

Cảm ơn ý kiến ​​của bạn! Tuy nhiên, đó không phải là một sai lầm - phần mềm được sử dụng trong vật lý học thuật và chúng tôi sử dụng LaTeX để phân tích/kết xuất toán học - có lẽ 50% hoặc nhiều hơn của văn bản được mã hóa là toán - và đầu ra có thể được sử dụng liên tục trong (Các ấn phẩm LaTeX). Vì vậy, trong khi tôi có thể đồng ý lại. RST trong các trường hợp chi phối văn bản mà không cần kiểm soát rất chi tiết định dạng, trường hợp sử dụng này khá ngược lại và LaTeX được trang bị tốt hơn cho ứng dụng và cộng đồng người dùng. Nó chỉ là khó xử để làm những điều linh hoạt với nó ... – andybuckley

+0

@andybuckley: RST hỗ trợ toán LaTeX. Tôi đã sử dụng nó. Tôi thích sự hỗ trợ trong nhân sư (http://sphinx.pocoo.org/). Xem câu hỏi liên quan này http://stackoverflow.com/questions/3610551/math-in-restructuredtext-with-latex để được tư vấn hữu ích hơn. –

+0

@andybuckley: "Đó không phải là một sai lầm". Nếu nó không hoạt động, có một sai lầm ở đâu đó. Nếu không có sai lầm, nó phải hoạt động hoàn hảo. Nếu nó hoạt động hoàn hảo, tại sao lại đặt một câu hỏi? –

1

Khi bạn đang cân nhắc việc sử dụng TeX để thực hiện hiển thị, tôi nghi ngờ rằng hiệu suất không phải là vấn đề. Trong trường hợp này, bạn có một vài tùy chọn: dvi2txt để tìm văn bản của bạn từ một tệp dvi đơn (được chuẩn bị để tạo một văn bản cho mỗi nhãn) hoặc thậm chí hiển thị dvi thành hình ảnh raster, nếu nó phù hợp với bạn - đó là cách hevea hoặc latex2html xử lý công thức.

+0

Cảm ơn các ý kiến. Trên thực tế, chúng tôi có hàng ngàn nhãn để phân tích cú pháp (điều này được tối ưu hóa một chút để tạo ra âm mưu và chúng tôi muốn tăng tốc độ này một chút). Nhưng các tài liệu LaTeX rất đơn giản có thể xử lý nhanh chóng chấp nhận được và việc ghép một số nhãn trong một tài liệu TeX có thể là do-có thể - tôi sẽ cho nó đi. AFAIK thời gian khởi động của LaTeX có khả năng thống trị trong trường hợp này, vì vậy một cái gì đó giống như daemon LaTeX đã được làm việc trong PyTeX sẽ hữu ích ... nếu chỉ có dự án đó vẫn còn sống! – andybuckley

1

Tôi sẽ thử pandoc [nhập mô tả liên kết tại đây] [1]. Nó được viết bằng Haskell, nhưng nó là một latex thực sự tốt đẹp 2 bất cứ công cụ chuyển đổi nào.

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

+1

Tôi ước rằng trong Haskell không phải là vấn đề, nhưng đó là: Tôi không thể phân phối mã dựa trên một chương trình không chuẩn và người dùng với trình biên dịch Haskell!Theo như tôi có thể nói không có ràng buộc Python-Haskell thực sự, hoặc là, mà không phải là một kẻ giết người nhưng không giúp :) Tôi sẽ sử dụng nó một cách riêng tư, mặc dù - cảm ơn! – andybuckley

3

Một lời cảnh cáo: Việc viết một trình phân tích cú pháp hoàn chỉnh cho TeX đơn giản hơn rất nhiều so với những gì bạn nghĩ. Lệnh TeX cấp (không phải LaTeX) \def thực sự mở rộng cú pháp của TeX. Ví dụ: \def\foo #1.{{\bf #1}} sẽ mở rộng \foo goo. thành goo - Lưu ý rằng dấu chấm đã trở thành dấu phân cách cho macro foo! Do đó, nếu bạn phải xử lý bất kỳ hình thức nào của TeX,, không hạn chế về gói nào có thể được sử dụng, bạn không nên dựa vào phân tích cú pháp đơn giản. Bạn cần hiển thị TeX. catdvi là những gì tôi sử dụng, mặc dù nó không phải là hoàn hảo.

+1

Tôi có thể thực hiện việc phân tích cú pháp chung ít hơn thế, nhưng cảm ơn lời nhắc! Tôi có thể hạn chế việc sử dụng một tập con hợp lý hơn của LaTeX - lý do xem xét một trình phân tích cú pháp thay vì tải các regex trong một vòng lặp là tôi muốn có thể xử lý các macro lồng nhau và macro đa arg một cách độc đáo và nhận cú đúp toán để hoạt động đúng. Sau đó, tôi có thể giảm các macro txt-không liên quan như \ text và \ mathrm trước, và xử lý những thứ có liên quan đến txt như \ frac last ... có thể ngay cả với các dấu ngoặc đơn thích hợp! – andybuckley

0

Xây dựng bài đăng khác Eduardo Leoni, tôi đang xem xét pandoc và tôi thấy rằng nó đi kèm với một thực thi độc lập nhưng cũng trên this page nó hứa hẹn một cách để xây dựng thư viện hệ thống C-callable. Có lẽ đây là thứ mà bạn có thể sống cùng?

Các vấn đề liên quan