Làm cách nào tôi có thể kết hợp LaTeX với Markdown? [đóng cửa]


181

Tôi đã sử dụng Markdown cho các ghi chú lớp học, và nó thật tuyệt. Tôi thậm chí còn thực hiện một số tiền xử lý trên Markdown để tôi có thể làm những việc như bảng. Nhưng thuật ngữ này tôi đang dạy một lớp học có rất nhiều toán học và tôi rất thích có thể đưa các công thức LaTeX với Markdown, đại loại như thế này:

The refinement relation is written $a \sqsubseteq b$, which can be 
pronounced "$a$ approximates $b$" or "$b$ is at least as defined as $a$".

Tôi muốn có thể lấy từng đoạn LaTeX và xử lý trước nó thành một tệp PNG được khử răng cưa đẹp mà sau đó tôi có thể đưa vào Markdown của mình thông qua <img>thẻ HTML . Nhưng tôi hoàn toàn không biết làm thế nào để lấy một mảnh LaTeX và có được một hình ảnh đẹp mà

  • Có hộp giới hạn bên phải
  • Được khử răng cưa

Tất cả những gì tôi biết làm là lấy các trang đầy đủ ở định dạng DVI, PostScript hoặc PDF.

Tôi chắc chắn rằng vấn đề này đã được giải quyết, nhưng tôi không thể đoán đúng thuật ngữ tìm kiếm. Bất kỳ đề xuất làm thế nào để giải quyết nó hoặc nơi để tìm kiếm một giải pháp hiện có?


EDIT : Đã cài đặt mathTeX, tôi có thể nói rằng mã này không linh hoạt, nó vi phạm tiêu chuẩn Phân cấp hệ thống tập tin Linux và đó là công việc nghiệp dư, theo cả hai nghĩa tốt và xấu của từ đó. Mã này phức tạp đến mức không có lỗi rõ ràng. Tôi sẽ tìm kiếm các lựa chọn thay thế.

Ngoài ra, rõ ràng rằng ở phía dưới, các giải pháp dựa trên dvipng.


MỘT NĂM SAU : Tôi chưa bao giờ có được sự tích hợp liền mạch mà tôi đã hy vọng, nhưng tôi đang đi khập khiễng trên một kịch bản phát minh của riêng tôi. Hóa ra thay vì dvipngnó dễ sử dụng hơn một chút dvips -Econvertchương trình của ImageMagick. Các lợi ích là kiểm soát nhiều hơn một chút đối với những thứ như chia tỷ lệ và dễ dàng tạo nền trong suốt. Sự tò mò có thể kiểm tra ví dụ này .

Tôi không thể giới thiệu giải pháp này cho bất cứ ai. Nhưng tôi cũng không thể giới thiệu MathTeX.


Những câu hỏi hay. Tôi đã thực hiện sự chuẩn bị của mình trực tiếp trong LaTeX, nhưng nó hơi dài dòng cho mục đích đó, thậm chí sử dụng auctex ...
dmckee --- ex-moderator mèo con

6
Bạn đã thử Pandoc? Bản thân nó không chỉ chuyển đổi Markdown + LaTeX thành (bất cứ thứ gì) mà còn với bản phát hành mới nhất, nó cho phép bạn viết các kịch bản hoạt động trên cây phân tích cú pháp, do đó bạn có thể dễ dàng làm những gì bạn muốn.
ShreevatsaR

@ShreevatsaR Tôi sẽ thử cả pandoc và multimarkdown, có lẽ là vào mùa hè này.
Norman Ramsey

4
phức tạp đến mức không có lỗi rõ ràng - tôi đã bỏ lỡ tài liệu tham khảo thú vị này lần đầu tiên tôi đọc nó.
Charles Stewart

6
Ai đó có thể giải thích làm thế nào câu hỏi này lạc đề?
AnnanFay

Câu trả lời:



41

Có lẽ mathJAX là vé. Nó được xây dựng trên jsMath , một thư viện JavaScript 2004 cổ điển.

Kể từ ngày 5 tháng 2 năm 2015, tôi sẽ chuyển sang giới thiệu KaTeX - thư viện Javascript LaTeX hiệu quả nhất từ ​​Khan Academy.


Liên quan: stackoverflow.com/questions/11256433/ tôi cũng đang xem xét phía máy chủ Katex, ví dụ như với github.com/asciidoctor/asciidoctor/pull/3338
Ciro Santilli 冠状 病 六四 法轮功

25

Thêm mã sau vào đầu tệp Markdown của bạn để nhận hỗ trợ kết xuất 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="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.4/MathJax.js?config=TeX-AMS_HTML-full"></script>

và sau đó `$ x ^ 2 $` hoặc `$$ x ^ 2 $$` sẽ hiển thị như mong đợi :-)

Bạn luôn có thể cài đặt phiên bản MathJax cục bộ nếu bạn không muốn sử dụng bản phân phối trực tuyến, nhưng bạn có thể cần lưu trữ nó thông qua một máy chủ web cục bộ.

CẬP NHẬT : những ngày này tôi chỉ sử dụng pandoc thay vì đánh dấu chính tắc, nhưng ở trên vẫn hữu ích.


Lưu ý từ tương lai: cdn.mathjax.org sắp hết tuổi thọ, hãy kiểm tra mathjax.org/cdn-shocking-down để biết các mẹo di chuyển (và có thể cập nhật bài đăng của bạn cho độc giả tương lai).
Peter Krautzberger

12

Tôi sẽ trả lời câu hỏi của bạn bằng một câu hỏi ngược ...

Bạn nghĩ gì về chế độ Org? Nó không thuần khiết như Markdown, nhưng nó giống như Markdown, và tôi thấy nó dễ làm việc và nó cho phép nhúng latex. Cf. http://www.gnu.org/software/emacs/manual/html_node/org/Embedded-LaTeX.html

Bản thảo

Trong trường hợp bạn chưa xem chế độ org, nó có một thế mạnh lớn là "ngôn ngữ đánh dấu tự nhiên" có mục đích chung so với Markdown, cụ thể là cách xử lý các bảng. Nguồn:

| 1 | 0 | 0 |
| -1 | 1 | 0 |
| -1 | -1 | 1 |

chỉ đại diện cho những gì bạn nghĩ rằng nó sẽ ...

Và latex được kết xuất thành từng mảnh bằng cách sử dụng chế độ xem trước của chế độ tex.


1
Tôi đã xem chế độ org và mặc dù LaTeX được nhúng có vẻ được thực hiện rất tốt, nhưng có vẻ như quá mức cần thiết cho những gì tôi muốn (điển hình của emacs). Thật thú vị, tôi lưu ý rằng công cụ kết xuất cơ bản là một lần nữa dvipng. Vấn đề bảng là một vấn đề quan trọng nhưng tôi đã viết một bộ tiền xử lý để giải quyết nó :-) +1
Norman Ramsey

8

bạn nên xem qua multimarkdown http://fletcherpenney.net/multimarkdown/

nó có hỗ trợ siêu dữ liệu (tiêu đề, từ khóa, ngày tháng, tác giả, v.v.), bảng, asciimath, mathml, hell tôi chắc chắn rằng bạn có thể dán mã toán học latex ngay trong đó. về cơ bản, nó là một phần mở rộng để đánh dấu để thêm tất cả các tính năng rất hữu ích khác này. Nó sử dụng XSLT, vì vậy bạn có thể dễ dàng thực hiện các kiểu LaTeX của riêng mình và chuyển đổi trực tiếp. Tôi sử dụng nó mọi lúc, và tôi thích nó rất nhiều.

Tôi muốn markdown sẽ kết hợp multimarkdown. nó sẽ khá tốt

Chỉnh sửa : Multimarkdown sẽ tạo ra html, latex và một vài định dạng khác. html có thể đi kèm với một biểu định kiểu bạn chọn. nó cũng sẽ chuyển đổi thành MathML, hiển thị trong Firefox và Safari / Chrome, nếu tôi nhớ chính xác.


Trông phức tạp hơn những gì tôi muốn và chưa rõ sức mạnh biểu cảm là gì (ngoài MathML được kết hợp bởi tham chiếu0).
Norman Ramsey


6

kramdown thực hiện chính xác những gì bạn mô tả:

https://kramdown.gettalong.org/syntax.html#math-blocks

Và đó là cách đáng tin cậy và được xác định rõ ràng hơn Markdown.


Có vẻ như trang này hiện đang ngừng hoạt động, nhưng đây là trang được sử dụng để chuyển hướng 301 theo máy wayback: kramdown.gettalong.org:80/
Derwent


3

Này, đây có thể không phải là giải pháp lý tưởng nhất, nhưng nó hiệu quả với tôi. Tôi đã kết thúc việc tạo một phần mở rộng LaTeX của Python-Markdown.

https://github.com/justinvh/Markdown-LaTeX

Nó bổ sung hỗ trợ cho các biểu thức toán học và văn bản nội tuyến bằng cú pháp $ math $ và% text%. Phần mở rộng là một bộ tiền xử lý sẽ sử dụng latex / dvipng để tạo pngs cho các phương trình / văn bản tương ứng và sau đó base64 mã hóa dữ liệu để định tuyến hình ảnh trực tiếp, thay vì có hình ảnh bên ngoài.

Sau đó, dữ liệu được đặt trong một tệp bộ đệm được phân tách đơn giản, mã hóa biểu thức thành biểu diễn base64. Điều này giới hạn số lần latex thực sự phải được chạy.

Đây là một ví dụ:

%Hello, world!% This is regular text, but this: $y = mx + b$ is not.

Đầu ra:

$ 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>

Như bạn có thể thấy nó là một đầu ra dài dòng, nhưng đó thực sự không phải là vấn đề vì bạn đã sử dụng Markdown :)


2

vâng, nhưng bạn sẽ phải tự hack một chút. Tôi đã viết một bộ lọc thay thế thẻ latex $\some\inline\latex$hoặc $$\some\equation$$bằng thẻ hình ảnh phù hợp thành tập lệnh mimetex.cgi . Phải mất tất cả 5 phút.

Cảnh báo: xấu xí một cách ngoạn mục ...

#!/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)

Tất nhiên, bạn phải tự xác định css thích hợp cho hình ảnh .block và .inline ...


2

Bây giờ tôi chỉ bắt gặp cuộc thảo luận này, vì vậy tôi hy vọng bình luận của tôi vẫn hữu ích. Tôi có liên quan đến MathJax và, từ cách tôi hiểu tình huống của bạn, tôi nghĩ rằng đó sẽ là một cách tốt để giải quyết vấn đề: bạn để lại mã LaTeX của mình và để MathJax hiển thị toán học khi xem.

Có bất kỳ lý do tại sao bạn thích hình ảnh?


1
Một số trang web Stack Exchange nhất định Math.Se, Chemistry.SE, v.v ... hiện đang sử dụng MathJax, mặc dù vị trí của quản lý là MathJax quá nặng để được triển khai trừ khi thực sự cần thiết. Nhưng điều đó không áp dụng cho các bài thuyết trình vì nó yêu cầu các tác phẩm phải chạy trong trình duyệt.
dmckee --- ex-moderator mèo con

1

Ngôn ngữ của bạn đang sử dụng là gì?

Nếu bạn có thể sử dụng ruby, thì maruku có thể được cấu hình để xử lý toán học bằng nhiều bộ chuyển đổi latex-> MathML khác nhau. Instiki sử dụng cái này. Cũng có thể mở rộng PHPMarkdown để sử dụng itex2MML để chuyển đổi toán học. Về cơ bản, bạn chèn các bước bổ sung trong công cụ Markdown tại các điểm thích hợp.

Vì vậy, với ruby ​​và PHP, điều này đã được thực hiện. Tôi đoán các giải pháp này cũng có thể được điều chỉnh phù hợp với các ngôn ngữ khác - Tôi đã nhận được phần mở rộng itex2MML để tạo ra các ràng buộc perl.


1

Tôi đã tìm kiếm chính xác điều tương tự khi tôi tìm thấy teqhtml . Nó thực hiện việc chuyển đổi các phương trình $ và $$ thành hình ảnh với phần thưởng tuyệt vời là căn chỉnh hình ảnh kết quả theo chiều dọc với văn bản xung quanh. Không có nhiều tài liệu nhưng nó khá đơn giản.

Hy vọng nó sẽ giúp một số độc giả tương lai.


1

Xin lỗi để tạo ra một chủ đề thực sự cũ, nhưng tôi đã sử dụng jemdoc trong một vài năm và nó thực sự tuyệt vời.


1

Có thể phân tích Markdown trong Lua bằng mã Lunamark (xem repo Github của nó ), có nghĩa là Markdown có thể được phân tích cú pháp trực tiếp bởi các macro trong Luatex và hỗ trợ chuyển đổi sang nhiều định dạng được Pandoc hỗ trợ (nghĩa là thư viện rất phù hợp để sử dụng trong lualatex, contextMetafun, Plain Luatex và texluascript).

Dự án được bắt đầu bởi John MacFarlane , tác giả của Pandoc, và sự phát triển của công cụ theo dõi Pandoc khá chặt chẽ và có chất lượng tương tự (tức là tuyệt vời).

Khaled Hosny đã viết một mô-đun Bối cảnh, cung cấp hỗ trợ macro thuận tiện. Câu trả lời của Michal cho Có gói nào có hỗ trợ Markdown không? câu hỏi cung cấp mã cung cấp hỗ trợ tương tự cho latex.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.