軽量のマークアップ言語を使用して、大学の授業でメモを取りたいのですが。
私が選んだエディターはgeditで、 reStructuredText Tools for Gedit が見つかりました。これにより、reStructuredTextプロセッサーが実行され、geditのペインにHTMLがレンダリングされます。これはすばらしいことであり、その道の80%です。
しかし、私のクラスの多くでは、ノートに数学の方程式やギリシャ文字を含める必要があります。私はLaTeXについてはあまり詳しくありませんが、これらの機能があることを理解しています。
LaSTXをreSTドキュメントで使用するにはどうすればよいですか? reSTドキュメントをLaTeXに処理してからHTMLにレンダリングする必要がありますか、それとももっと良い方法がありますか?マークダウンはこれを簡単にしますか?必要に応じて、geditプラグインを変更できます。
最後に、誰かこれを行いますか?プレーンテキストエディターでクラスのメモを取るための他の提案はありますか?
ありがとう!
バージョン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
ではありません。
リリース0.8(2011-07-07)以降、「数学」の役割とディレクティブ(LaTex入力構文を使用)がネイティブでサポートされています。
これが私がすることです:
ReSTドキュメントの最初に数学の役割を追加します。
.. role:: raw-math(raw)
:format: latex html
次のような数学を書く
:raw-math:`$$ \frac{s}{\sqrt{N}} $$`
(ブロックで使用する場合は$$ ... $$
を使用し、インラインで使用する場合は$ ... $
を使用します。)
次のような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ファイルに出力します。
ノート:
LaTeXとReSTは、同じ問題(ドキュメント全体のマークアップ)に対する2つの解決策であり、一方が他方の内側に満足して住むことができるかどうかはわかりません。
TeXのサブセットを使用してグラフィック方程式を生成し、HTMLまたは類似のもの(たとえば、 TracのLaTeX数式マクロ )を生成するためのコードを見てきましたが、これは利用可能な最良のソリューションです。
問題を少し分解すると、最初の目標は、latexコードの出力(<、>、etchのcgi-escapesを除く)をそのまま、選択したライトマークアップから生成されたhtmlに取得することです。 mathJax (強く推奨)または itex で簡単にLaTexできます。
まず、ReSTの代わりにmarkdownを使用すると、ReSTがエスケープに\を使用するため、おそらくすべてのLaTeXを保護する必要があります。 markdown と mathJax でうまく機能する例については、 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 オーバーライドクラス。
問題は、reSTにプラグインがないことです。 Sphinx ;などの拡張可能なフレームワークを選択できます。 JSMath のプラグインはすでに含まれており、 MathJax のプラグインも可能です。さらに、SphinxはLaTeXを利用してPDFドキュメントを直接作成します。
もう1つのより軽量なソリューションは、reSTテンプレートを編集してMathJaxを含め、MathJaxの(LaTeXのような)構文をドキュメントで使用できるようにすることです。
しかし、たいていは深刻なことには直接LaTeXを使用します。これらの軽量マークアップ言語のカスタマイズ機能は、すべてに対して十分に包括的ではありません。
この項目 DocutilsからFAQは、TeX数学を比較的簡単に含める1つの方法を説明しています。まず、方程式を直接LaTeXに渡す解釈済みテキストの役割を定義します。
.. role:: raw-latex(raw)
:format: latex
次に、その役割をテキストで使用できます
The area of a circle is :raw-latex:`$\pi r^2$`
FAQエントリは、これを行う他のいくつかの方法についても言及しています。これには、HTMLを生成するときに数式を画像にレンダリングするために使用できるプリプロセッサアプローチが含まれます。
Docutilsのバージョン0.8(reStructuredTextを解析)はLaTeX数学をサポートしていることに注意してください。多くの例については http://article.gmane.org/gmane.text.docutils.user/6255 を参照してください。 「--math-output」オプションの選択肢は、MathML、HTML、MathJax、LaTeXです。
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で精巧なサポートがあると思います)-それは素晴らしいでしょう!
以前の答えを拡張するために、これは私がMathJaxをReSTとDocutils、LaTeXは不要:
以下のようなReSTソース内でLaTeXスタイルの数学を使用します。
The radar backscatter coefficient is $\sigma^0$.
これをファイル内のどこかに含めます(私は私の一番下に置きます):
.. 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>
HTMLに変換:
rst2html report.rst report.html
最新のブラウザーで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スタイルよりもスタイル。
Rst2htmlの代わりに rst2mathml.py を使用します。
それは、latex-mathモードでdocutilsを拡張します。このモードの内容はMathMLに変換されます。