LaTeXとMarkdownをどのように混合できますか?[閉まっている]


181

私はクラスのメモにMarkdownを使用してきました。Markdownでいくつかの前処理を行うことで、テーブルのようなこともできます。しかし、今期は多くの数学を使ってクラスを教えています。MarkdownでLaTeXの数式を次のように記述できるようになりたいです。

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

LaTeXの各フラグメントを取得し、それを前処理して素敵なアンチエイリアス処理されたPNGファイルにして、HTML <img>タグを介してMarkdownに含めることができるようにしたいと思います。しかし、どのようにしてLaTeXのフラグメントを取得して、

  • 正しいバウンディングボックスを持っています
  • アンチエイリアスされている

私が知っている方法は、DVI、PostScript、またはPDF形式でページ全体を取得することだけです。

この問題は解決されたと思いますが、適切な検索キーワードを推測できませんでした。それを解決する方法または既存のソリューションを探す場所はありますか?


編集:mathTeXをインストールしたので、コードは柔軟性がなく、Linuxファイルシステム階層標準に違反しており、それはその言葉の良い意味でも悪い意味でもアマチュアの仕事です。コードは非常に複雑なので、明らかな障害はありません。私は代替案を探します。

また、一番下のソリューションはに基づいてdvipngいることは明らかです。


ONE YEAR LATER:私は待っていたのシームレスな統合を手に入れたことはありませんが、私は私自身の工夫のスクリプトに沿って足を引きずっています。代わりに、ImageMagick のプログラムdvipngを使用する方が少し簡単です。メリットは、スケーリングなどの制御が少し増えることと、透明な背景を簡単に作成できることです。好奇心が強い人はこの例を調べることができます。 dvips -Econvert

この解決策は誰にもお勧めできません。しかし、MathTeXもお勧めできません。


良い質問です。私はLaTeXで直接準備をしましたが、auctexを使用したとしても、その目的には少し冗長です...
dmckee --- ex-moderator kitten

6
パンドックを試しましたか?それ自体がMarkdown + LaTeXを(何でも)に変換するだけでなく、最新リリースでは、解析ツリーで機能するスクリプトを記述できるため、簡単に好きなことができます。
ShreevatsaR 2010

@ShreevatsaRパンドックとマルチマークダウンの両方を試すつもりです。おそらくこの夏でしょう。
ノーマンラムジー

4
非常に複雑であるため、明らかな障害はありません。最初に読んだときに、この心地よい参考文献を見逃しました。
Charles Stewart

6
誰かがこの質問がトピックから外れていることを説明できますか?
AnnanFay 2013

回答:



41

おそらくmathJAXがチケットです。これは、2004年の古いJavaScriptライブラリであるjsMathに基づいています。

2015年2月5日の時点で、KaTeX -Khan Academyの最もパフォーマンスの高いJavascript LaTeXライブラリを推奨するように切り替えます。



25

MarkJaxレンダリングサポートを取得するには、Markdownファイルの先頭に次のコードを追加します

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

そして、 `$ x ^ 2 $`または `$$ x ^ 2 $$`は期待通りにレンダリングされます:-)

オンライン配布を使用したくない場合は、いつでもローカルバージョンのMathJaxをインストールできますが、ローカルのWebサーバーを介してホストする必要がある場合があります。

更新最近では、正規のマークダウンの代わりにpandocを使用していますが、上記はまだ役に立ちます。


将来からの注意:cdn.mathjax.orgは寿命が近づいています。mathjax.org/ cdn- shutting - downで移行のヒントを確認してください(将来の読者のために投稿を更新してください)。
Peter Krautzberger 2017

12

質問に回答します...

組織モードについてどう思いますか?Markdownほど純粋ではありませんが、Markdownに似ており、扱いが簡単で、Latexを埋め込むことができます。Cf. http://www.gnu.org/software/emacs/manual/html_node/org/Embedded-LaTeX.html

追記

org-modeを見ていない場合は、Markdownよりも汎用の「自然なマークアップ言語」、つまりテーブルの扱いとして、1つの大きな強みがあります。起源:

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

それはあなたがそれがそうするだろうと思うものを単に表します...

そして、ラテックスは、tex-modeのpreview-latexを使用してバラバラにレンダリングされます。


1
私はorg-modeを見ました、そして、埋め込まれたLaTeXは非常にうまくいっているように見えますが、それは私が欲しいもの(emacsの典型)のための完全な過剰のように見えます。興味深いことに、基礎となるレンダリングエンジンは再びdvipngです。テーブルの問題は重要ですが、私はすでにそれを解決するためのプリプロセッサを書いています:-) +1
Norman Ramsey

8

あなたはマルチマークダウンhttp://fletcherpenney.net/multimarkdown/を見てください

メタデータ(ヘッダー、キーワード、日付、作成者など)、テーブル、asciimath、mathml、地獄をサポートしています。きっと、ラテックスの数学コードをそのまま挿入できるでしょう。これは基本的に、これらすべての他の非常に便利な機能を追加するためのマークダウンの拡張機能です。XSLTを使用しているため、独自のLaTeXスタイルを簡単に作成して、直接変換することができます。私はいつもそれを使っており、とても気に入っています。

マークダウンにマルチマークダウンを組み込むだけでよいのですが。それはかなりいいでしょう。

編集:Multimarkdownは、html、latex、およびその他のいくつかのフォーマットを生成します。htmlには、選択したスタイルシートを含めることができます。私が正しく覚えていれば、MathMLにも変換され、FirefoxとSafari / Chromeに表示されます。


私が望んでいるよりも複雑に見え、表現力が何であるかが明確ではありません(MathML以外は参照により組み込まれています0)。
ノーマンラムジー


6

kramdownはまさにあなたが説明することをします:

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

また、Markdownよりも信頼性が高く、明確に定義されています。


現在このページはダウンしているようですが、ウェイバックマシンに従って301リダイレクトに使用していたページです:kramdown.gettalong.org:80/
Derwent

5

mimeTeXが便利な場合があります。


2
後継のmathTeXはさらに良く見えます---そしてそれが主力であることdvipngは明らかです。すばらしいポインタをありがとう!+1
ノーマンラムジー

1
今私はKaTeXをお勧めします-Khan Academyからの最もパフォーマンスの高いJavaScript LaTeXライブラリ
duffymo 2015

:リンクに変更されたforkosh.com/mimetex.html
QUINE

3

ねえ、これは最も理想的な解決策ではないかもしれませんが、私にとってはうまくいきます。私は最終的にPython-Markdown LaTeX拡張を作成しました。

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

$ math $および%text%構文を使用したインライン数式およびテキスト式のサポートを追加します。拡張機能は、latex / dvipngを使用してそれぞれの方程式/テキストのpngを生成し、base64エンコードしてデータを直接インライン化するプリプロセッサであり、外部イメージではなく直接インライン化します。

その後、データは、式をbase64表現にエンコードする単純区切りのキャッシュファイルに入れられます。これにより、latexを実際に実行する必要がある回数が制限されます。

次に例を示します。

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

出力:

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

ご覧のとおり、詳細な出力ですが、Markdownを既に使用しているため、これは実際には問題になりません:)


2

はい、しかしあなたはそれをあなた自身で少しハックしなければならないでしょう。ラテックスタグ$\some\inline\latex$または$$\some\equation$$適切なイメージタグをmimetex.cgiスクリプトに置き換えるフィルターを作成しました。全部で5分かかりました。

警告:見苦しい醜い...

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

もちろん、.blockイメージと.inlineイメージに適切なcssを自分で定義する必要があります...


2

私はこの議論にたまたま出会ったので、私のコメントがまだ有用であることを願っています。私はMathJaxに関与しており、状況をどのように理解しているかから、それは問題を解決する良い方法だと思います。LaTeXコードをそのままにして、MathJaxに表示時に数学をレンダリングさせます。

画像を好む理由はありますか?


1
特定のStack ExchangeサイトMath.Se、Physics.SEなど... 現在MathJaxを使用していますが、絶対に必要な場合を除いて、MathJaxは非常に重いため展開できないという立場にあります。ただし、ブラウザで動作するように作業する必要があるため、プレゼンテーションには適用されません。
dmckee ---元モデレーターの子猫'17

1

どの言語を使用していますか?

rubyを使用できる場合は、さまざまなlatex-> MathMLコンバーターを使用して数学を処理するようにmarukuを構成できます。 Instikiはこれを使用します。PHPMarkdownを拡張してitex2MMLを使用し、数学を変換することもできます。基本的に、適切なポイントでMarkdownエンジンに追加のステップを挿入します。

したがって、RubyとPHPでは、これが行われます。これらのソリューションは他の言語にも適用できると思います-perlバインディングを生成するためのitex2MML拡張も取得しました。


1

teqhtmlを見つけたとき、私はまったく同じものを探していました。$と$$の方程式から画像への変換を行い、結果の画像を周囲のテキストに垂直に揃えることができます。ドキュメントはそれほど多くありませんが、非常に簡単です。

将来の読者の皆さんのお役に立てば幸いです。


1

本当に古いスレッドを発生させて申し訳ありませんが、私はjemdocを数年間使用しており、それは本当に優れています。


1

Lunamarkコードを使用してLuaでMarkdownを解析できます(そのGithubリポジトリを参照)。これは、MarkateがLuatexのマクロによって直接解析され、Pandocがサポートする多くの形式への変換をサポートすることを意味します(つまり、ライブラリは適切です)で使用するにはlualatexcontext、Metafun、平野Luatex、およびtexluaスクリプト)。

このプロジェクトは、Pandocの作者であるJohn MacFarlaneによって開始されました。このツールの開発はPandocの開発を非常に厳密に追跡し、品質は類似しています(つまり、優れています)。

Khaled Hosnyは、便利なマクロサポートを提供するContextモジュールを作成しました。 Markdownをサポートするパッケージはありますか?に対するMichalの回答 質問は、ラテックスの同様のサポートを提供するコードを提供します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.