Cra*_*ins 51 math markdown latex restructuredtext gedit
我想使用轻量级标记语言在我的大学课堂上做笔记.
我选择的编辑器是gedit,我找到了Gedit的reStructuredText工具,它将运行reStructuredText处理器并在gedit的窗格中呈现HTML.这很棒,80%的路在那里.
但对于我的许多课程,我需要在笔记中包含数学方程式或希腊字符.虽然我对LaTeX不是很熟悉,但我的理解是它具有这些功能.
如何在reST文档中使用LaTeX?是否需要将reST文档处理为LaTeX,然后将其呈现为HTML,还是有更好的方法?降价会让这更容易吗?如有必要,我可以修改gedit插件.
最后,有人这样做吗?在纯文本编辑器中获取课堂笔记的任何其他建议?
谢谢!
dev*_*snd 71
从版本0.8开始,本机支持它:您不应再使用任何解决方法.语法也很简单.它与乳胶数学相同,但没有封闭$$
因此,您只需为数学块编写以下内容即可
.. math::
\frac{ \sum_{t=0}^{N}f(t,k) }{N}
Run Code Online (Sandbox Code Playgroud)
或者如果你想写内联你可以使用这个:
:math:`\frac{ \sum_{t=0}^{N}f(t,k) }{N}`
Run Code Online (Sandbox Code Playgroud)
注意那里的划界反击.
更新:
在较新的版本中,似乎有必要对数学元素使用双反斜杠,所以它是,\\frac而不是\frac
goz*_*lli 25
这就是我做的:
在reST文档的开头添加数学角色:
.. role:: raw-math(raw)
:format: latex htmlRun Code Online (Sandbox Code Playgroud)写下你的数学
:raw-math:`$$ \frac{s}{\sqrt{N}} $$`Run Code Online (Sandbox Code Playgroud)
($$ ... $$如果你想要它在一个块中,或者$ ... $如果你想要它内联,请使用.)
像这样生成html输出:
rst2html --stylesheet=/path/to/my_beautiful_stylesheet.css my_file.rst \
| tidy -q | /path/to/itex2MML > my_file.xhtml
这将生成html rst2html,整理tidy,然后将乳胶数学转换为MathML itex2MML,并在xhtml文件上输出.
笔记:
LaTeX和ReST是同一问题的两个解决方案(全文档标记),我不确定一个人会幸福地生活在另一个内部.
我已经看到使用TeX子集生成图形方程的代码,然后将其拉入HTML或类似方法(例如,Trac的LaTeX公式宏),这可能是最好的解决方案.
稍微分解你的问题,第一个目标是将乳胶代码输出逐字(除了<,>,蚀刻的cgi-escapes除外)到你选择的光标记生成的html中:一旦你有它,它就会很容易被gozzilli提到的mathJax(强烈推荐)或者itex进行LaTex.
首先,我应该说使用markdown而不是ReST可能会更容易,因为ReST使用\进行转义,因此所有LaTeX都必须受到保护.对于事情如何很好地锻炼身体用一个例子降价和mathJax,去玩弄在安装mathoverflow.net.
不过,我会假设您真的需要ReST(和mathJax),在这种情况下,有两种方法:使用库存ReST(以及繁琐的转义),或者将一些LaTeX处理程序添加到docutils.
选项1 - 股票ReST:
对于内联数学,只需使用verbatim以及后处理器正在寻找的任何标签:``$ x <\ pi $``.对于多行数学,你需要一个文字块,但你需要设置一个类属性,例如MathJaX来解析它,否则会跳过<pre>标签:
.. class:: mathjax_process
::
\begin{equation}
x<\pi
\end{equation}
Run Code Online (Sandbox Code Playgroud)
选项2:扩展ReST处理器
如果你愿意做一些黑客扩展你的ReST处理器,你可以通过为内联乳胶(例如)定义自定义解释文本角色:latex:`x<\pi`和多行数学的自定义指令,为LaTeX文字获得更好的表示法,例如
.. latex::
\begin{equation}
x<\pi
\end{equation}
Run Code Online (Sandbox Code Playgroud)
`x<\pi`如果使用default-role,内联数学符号甚至可以缩短为 .
有几种方法可以实现角色和指令.我已经(大致)得到了以下内容,它具有很好的功能(与我见过的大多数其他黑客不同),它降低为没有集成后处理的编写器的文字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)
Run Code Online (Sandbox Code Playgroud)
上面将使用类"latex"来标记要处理的东西,因此您需要配置mathJax或等效项来查找此类.或者,更改上面的代码将类设置为"mathjax_process",这是默认的mathJax覆盖类.
Docutils FAQ中的这个项目描述了一种相对容易包含TeX数学的方法.首先为解释文本定义一个角色,将方程直接传递给LaTeX:
.. role:: raw-latex(raw)
:format: latex
Run Code Online (Sandbox Code Playgroud)
然后,您可以在文本中使用该角色
The area of a circle is :raw-latex:`$\pi r^2$`
Run Code Online (Sandbox Code Playgroud)
FAQ条目还提到了其他几种方法,包括一种预处理器方法,可用于在生成HTML时将数学呈现给图像.