web-dev-qa-db-ja.com

LaTeXとMarkdownを混在させるにはどうすればよいですか?

私はクラスノートにマークダウンを使用していますが、それは素晴らしいことです。テーブルのようなことができるように、Markdownで前処理を行うこともあります。しかし、この用語は多くの数学を使ってクラスを教えているので、LaTeXの数式をMarkdownで追加できるようになりたいと思っています。

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形式でフルページを取得することだけです。

この問題は解決されたと思いますが、正しい検索語を推測することはできませんでした。それを解決する方法や既存のソリューションを探す場所についての提案はありますか?


EDIT:mathTeXをインストールしたので、コードは柔軟性がなく、Linux Filesystem Hierarchy標準に違反し、アマチュア作業であると言えます。 -その言葉の良し悪しの両方で。コードは非常に複雑なため、明らかな障害はありません。私は代わりを探しています。

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


1年後:期待していたシームレスな統合が得られませんでしたが、自分の考案したスクリプトに沿ってリンプしています。 dvipngの代わりに、dvips -EとImageMagickのconvertプログラムを使用する方が少し簡単であることがわかります。利点は、スケーリングのようなものをわずかに制御しやすく、透明な背景を簡単に作成できることです。好奇心の強い人は この例 を検査できます。

このソリューションを誰にも勧めることはできません。しかし、MathTeXもお勧めできません。

167
Norman Ramsey

Pandoc で試しましたか?

おそらく mathJAX がチケットです。 2004年のビンテージJavaScriptライブラリである jsMath に基づいて構築されています。

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

40
duffymo

次のコードをMarkdownファイルの先頭に追加して、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>

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

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

UPDATE:最近では、標準的なマークダウンの代わりに pandoc を使用していますが、上記はまだ有用です。

22
fommil

あなたの質問に反問で答えます...

組織モードについてどう思いますか? 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を使用して断片的にレンダリングされます。

11
Charles Stewart

multimarkdownを見る必要があります http://fletcherpenney.net/multimarkdown/

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

マークダウンにマルチマークダウンが組み込まれることを望みます。かなりいいでしょう。

Edit:Multimarkdownは、html、latex、その他いくつかの形式を生成します。 htmlには、選択したスタイルシートが付属しています。正しく覚えていれば、MathMLにも変換され、FirefoxとSafari/Chromeに表示されます。

8
Mica

RStudio には無料のIDEがあり、MarkdownとLaTeXを使用できます。

6
rsacc

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

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

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

5
matt

mimeTeX が便利かもしれません。

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

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

$ math $および%text%構文を使用したインライン数学およびテキスト式のサポートを追加します。拡張機能は、latex/dvipngを使用して各方程式/テキストのpngを生成し、外部画像を持たずに画像を直接インライン化するためにデータをbase64エンコードするプリプロセッサです。

その後、データは、式をbase64表現にエンコードするシンプル区切りのキャッシュファイルに格納されます。これにより、ラテックスを実際に実行する回数が制限されます。

以下に例を示します。

%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を既に使用しているため、実際には問題ではありません:)

3

この議論に出会ったのは今だけなので、私のコメントがまだ役に立つことを願っています。私はMathJaxに携わっており、あなたの状況をどのように理解しているかから、それは問題を解決する良い方法だと思います。

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

2
Hylke Koers

はい。ただし、自分で少しハックする必要があります。ラテックスタグ$\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 __== "__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
brice

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

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

そのため、RubyとPHPを使用して、これを実行します。これらのソリューションは他の言語にも適応できると思います-Perlバインディングを作成するためのitex2MML拡張機能も入手しました。

1
Loop Space

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

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

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

1
Charles Stewart

teqhtml を見つけたとき、まったく同じものを探していました。結果の画像を周囲のテキストと垂直に揃えるという素晴らしいボーナスを使用して、$および$$方程式を画像に変換します。多くのドキュメントはありませんが、非常に簡単です。

将来の読者に役立つことを願っています。

1
John

本当に古いスレッドをすみませんが、私は jemdoc を数年使用しており、本当に素晴らしいです。

1
traviscj