web-dev-qa-db-ja.com

LaTeXを使用したreStructuredTextの数学

軽量のマークアップ言語を使用して、大学の授業でメモを取りたいのですが。

私が選んだエディターはgeditで、 reStructuredText Tools for Gedit が見つかりました。これにより、reStructuredTextプロセッサーが実行され、geditのペインにHTMLがレンダリングされます。これはすばらしいことであり、その道の80%です。

しかし、私のクラスの多くでは、ノートに数学の方程式やギリシャ文字を含める必要があります。私はLaTeXについてはあまり詳しくありませんが、これらの機能があることを理解しています。

LaSTXをreSTドキュメントで使用するにはどうすればよいですか? reSTドキュメントをLaTeXに処理してからHTMLにレンダリングする必要がありますか、それとももっと良い方法がありますか?マークダウンはこれを簡単にしますか?必要に応じて、geditプラグインを変更できます。

最後に、誰かこれを行いますか?プレーンテキストエディターでクラスのメモを取るための他の提案はありますか?

ありがとう!

53
Craig Younkins

バージョン0.8以降、ネイティブでサポートされています。回避策はもう使用しないでください。構文も非常に単純です。これは、latex mathと同じですが、囲み$$がありません。

だからあなたは単に数学ブロックのために次のように書くことができます

.. math::

   \frac{ \sum_{t=0}^{N}f(t,k) }{N}

または、インラインで書きたい場合は、これを使用できます。

:math:`\frac{ \sum_{t=0}^{N}f(t,k) }{N}`

そこに区切られたバックティックに注目してください。


更新:

新しいバージョンでは、数学要素に二重のバックスラッシュを使用する必要があるようですので、\\fracであり、\fracではありません。

66
devsnd

リリース0.8(2011-07-07)以降、「数学」の役割とディレクティブ(LaTex入力構文を使用)がネイティブでサポートされています。

31
Günter Milde

これが私がすることです:

  1. ReSTドキュメントの最初に数学の役割を追加します。

    .. role:: raw-math(raw)
        :format: latex html
  2. 次のような数学を書く

    :raw-math:`$$ \frac{s}{\sqrt{N}} $$`

    (ブロックで使用する場合は$$ ... $$を使用し、インラインで使用する場合は$ ... $を使用します。)

  3. 次のようなhtml出力を生成します。

    rst2html --stylesheet=/path/to/my_beautiful_stylesheet.css my_file.rst \
    | tidy -q | /path/to/itex2MML > my_file.xhtml

    これはrst2htmlを使用してHTMLを生成し、tidyを使用して片付け、ラテックス計算をitex2MMLを使用してMathMLに変換し、xhtmlファイルに出力します。

ノート:

  1. スタイルシートはオプションです
  2. Itex2MMLの場合は here に移動します。
  3. Htmlファイルの拡張子はxhtmlまたはxmlである必要があります。そうでない場合、数学はブラウザーに表示されません。
25
gozzilli

LaTeXとReSTは、同じ問題(ドキュメント全体のマークアップ)に対する2つの解決策であり、一方が他方の内側に満足して住むことができるかどうかはわかりません。

  • 最初にLaTeX、次にReST:数式(およびその他すべて)をレイアウトするために、LaTeXは文字体裁の要素を正確に配置する必要があります。 ReSTは、LaTeX出力(PostScriptなど)を入力として受け取りません。
  • 最初にReST、次にLaTeX:LaTeXコードを出力するReSTの出力フォーマッタを作成し、方程式またはその他の明示的なTeXを誤って解釈しないように、ReSTで拡張機能を定義する必要があります。 LaTeXからの出力は、PostScriptまたはPDFに似たものになります。

TeXのサブセットを使用してグラフィック方程式を生成し、HTMLまたは類似のもの(たとえば、 TracのLaTeX数式マクロ )を生成するためのコードを見てきましたが、これは利用可能な最良のソリューションです。

9
Mike DeSimone

問題を少し分解すると、最初の目標は、latexコードの出力(<、>、etchのcgi-escapesを除く)をそのまま、選択したライトマークアップから生成されたhtmlに取得することです。 mathJax (強く推奨)または itex で簡単にLaTexできます。

まず、ReSTの代わりにmarkdownを使用すると、ReSTがエスケープに\を使用するため、おそらくすべてのLaTeXを保護する必要があります。 markdownmathJax でうまく機能する例については、 mathoverflow.net で設定を試してみてください。

それにもかかわらず、ReST(およびmathJax)が本当に必要であると想定します。その場合、2つの方法があります。ストックReST(および扱いにくいエスケープ)を使用するか、いくつかのLaTeXハンドラーをdocutilsに追加します。

オプション1-在庫ReST:

インライン数学の場合は、逐語的に加えて、ポストプロセッサーが探しているタグ「$ x <\ pi $」を使用します。複数行の数学では、リテラルブロックが必要ですが、クラス属性を設定する必要があります。 MathJaXはそれを解析します。それ以外の場合は<pre>タグをスキップします。

.. class:: mathjax_process

::

  \begin{equation}
    x<\pi
  \end{equation}

オプション2:ReSTプロセッサーを拡張します

ReSTプロセッサを拡張するために少しハッキングすることをいとわない場合は、インラインラテックス用にカスタム解釈テキスト role を定義することにより、LaTeXリテラルをより適切に表記できます(例::latex:`x<\pi`)とカスタム directive は複数行の計算用です。例:.

.. latex::

  \begin{equation}
    x<\pi
  \end{equation}

default-role を使用すると、インライン数学表記を`x<\pi`に短縮することもできます。

ロールとディレクティブを実装する方法はいくつかあります。 (ほぼ)Nice機能を備えた次の機能に到達しました。これは(他のほとんどのハックとは異なり)、ポスト処理が統合されていないライター向けの文字通りのLaTexコードに低下します。

from docutils import nodes, utils
from docutils.parsers.rst import directives, Directive 

class Latex(Directive):
    """ Latex directive to display LaTeX as escaped literal wrapped in
        <pre class="latex">. 
    """
    required_arguments = 0
    optional_arguments = 0
    has_content = True
    def run(self):
        self.assert_has_content()
        prenode=nodes.literal_block(self.block_text,
                                    '\n'.join(self.content),
                                    classes=['latex'])
        return [prenode]
directives.register_directive('latex', Latex)

def latex_role(role, rawtext, text, lineno, inliner, options={}, content=[]):
    node = nodes.literal(rawtext,
                         '\(%s\)'%utils.unescape(text, 1),
                         classes=['latex'])
    return [node],[]
register_local_role('latex', latex_role)

上記は、クラス「latex」を使用して処理するものにマークを付けるので、このクラスを探すために mathJax または同等のものを構成する必要があります。または、上記のコードを変更して、クラスをデフォルトの「mathjax_process」に設定します mathJax オーバーライドクラス。

6
Janus

問題は、reSTにプラグインがないことです。 Sphinx ;などの拡張可能なフレームワークを選択できます。 JSMath のプラグインはすでに含まれており、 MathJax のプラグインも可能です。さらに、SphinxはLaTeXを利用してPDFドキュメントを直接作成します。

もう1つのより軽量なソリューションは、reSTテンプレートを編集してMathJaxを含め、MathJaxの(LaTeXのような)構文をドキュメントで使用できるようにすることです。

しかし、たいていは深刻なことには直接LaTeXを使用します。これらの軽量マークアップ言語のカスタマイズ機能は、すべてに対して十分に包括的ではありません。

5
Philipp

この項目 DocutilsからFAQは、TeX数学を比較的簡単に含める1つの方法を説明しています。まず、方程式を直接LaTeXに渡す解釈済みテキストの役割を定義します。

.. role:: raw-latex(raw)
    :format: latex

次に、その役割をテキストで使用できます

The area of a circle is :raw-latex:`$\pi r^2$`

FAQエントリは、これを行う他のいくつかの方法についても言及しています。これには、HTMLを生成するときに数式を画像にレンダリングするために使用できるプリプロセッサアプローチが含まれます。

5
Geoff Reedy

Docutilsのバージョン0.8(reStructuredTextを解析)はLaTeX数学をサポートしていることに注意してください。多くの例については http://article.gmane.org/gmane.text.docutils.user/6255 を参照してください。 「--math-output」オプションの選択肢は、MathML、HTML、MathJax、LaTeXです。

4
Ling

Pandocのマークダウン拡張機能は、LaTeX数学のインラインまたは表示を許可します。 $\sqrt {-1} $のように(すぐ隣接する)ドル記号の間に置くだけで、期待どおりに処理されます。私はいつもこの機能を使っており、実用的ではないと思います。マニュアルを参照 http://johnmacfarlane.net/pandoc/README.html#math

マークダウンが解析されると、pandocはHTML、LaTeX、ReST、RTF、DocBook、ODT、マンページなどを書き込むことができます。LaTeX数学コンテキストに派手なLaTeXパッケージが含まれていない場合は、数学をMathMLに解析することもできるため、 HTMLまたはRTFですぐにレンダリングされます。 (非LaTeXドキュメントでLaTeX数学を処理するための多くのオプションを提供します。)

PandocはReST(およびHTMLであり、それほど豪華ではないLaTeX)も解析します。したがって、ReStリーダーを含む解決策を提供したいと思っていましたが、数学を処理するための特別な機構がないようです。問題249の説明を参照してください http://code.google.com/p/pandoc/issues/detail?id=249 もう一度詳しく調べて確認します。

私はまだ誰もGeditのpandocプラグインを作成したとは思いません(emacsとTextMateで精巧なサポートがあると思います)-それは素晴らしいでしょう!

3
applicative

以前の答えを拡張するために、これは私がMathJaxReSTDocutils、LaTeXは不要:

  1. 以下のようなReSTソース内でLaTeXスタイルの数学を使用します。

    The radar backscatter coefficient is $\sigma^0$.
    
  2. これをファイル内のどこかに含めます(私は私の一番下に置きます):

    .. raw:: html
    
    <script type="text/x-mathjax-config">
    MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX", "output/HTML-CSS"],
    tex2jax: {
      inlineMath: [ ['$','$'], ["\\(","\\)"] ],
      displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
      processEscapes: true
    },
    "HTML-CSS": { availableFonts: ["TeX"] }
    });
    </script>
    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
    
  3. HTMLに変換:

    rst2html report.rst report.html
    
  4. 最新のブラウザーでHTMLをロードします。 MathJaxスクリプトがダウンロードされ、表示時にHTMLに適用されます。すべてが私にとっては素晴らしく見えます!

http://www.thales.math.uqam.ca/~labbes/Sage/rst2sws/ に感謝します。

更新:出力HTMLはFirefoxでは正常に機能しますが、MathJaxがChromeで動作するまでに長い時間がかかり、エラーが発生することに気付きました。最後の行のスクリプトソースを変更して修正しました

src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"

src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"

その理由は、FireFoxがMathMLをサポートしている一方で、Chrome(Webkit、実際に)はまだ(少なくとも完全にはサポートされていません。ブラウザのサポートをテストできます here )) 。

私はMathMLを必要としないのでTeXだけなので、対応するMathJaxバージョンを使用し、Chromeにエラーなしですばやくロードされます。さらに、数学TeXを入力する方がはるかに高速です。 -MathMLスタイルよりもスタイル。

3
Rich Li

Rst2htmlの代わりに rst2mathml.py を使用します。

それは、latex-mathモードでdocutilsを拡張します。このモードの内容はMathMLに変換されます。

2
Ben Reynwar

NoTex をお勧めします:LaTexを使用したrSTのサポートが統合されており、プレゼンテーションや数学の方程式にのみ使用できます。たとえば NoTex では、最初に次のようなrST置換を記述します

.. |E=mc²| replace:: :math:`E = mc ^ 2`

次に、必要な場所で|E=mc²|を使用します。 NoTex はLaTexを使用してE=mc²(rST置換を示すパイプ記号なし)のようなものに変換します)そして、MathJaxを使用してHTMLで同様にレンダリングされます。

1
hsk81