Математика в реструктурированном тексте с LaTeX
Я хотел бы использовать легкий язык разметки, чтобы делать заметки в своих школьных классах.
Мой редактор выбора - gedit, и я нашел reStructuredText Tools для Gedit, который запустит процессор reStructuredText и отобразит HTML в панели в gedit. Это здорово, и 80% от этого пути.
Но для многих моих классов мне нужно включить в мои заметки математические уравнения или греческие символы. Хотя я не очень хорошо знаком с LaTeX, я понимаю, что он обладает этими возможностями.
Как я могу использовать LaTeX в документе reST? Будет ли документ reST необходимо обработать в LaTeX, затем отобразить в HTML, или есть лучший способ? Уценка сделает это проще? При необходимости я могу изменить плагин gedit.
Наконец, кто-нибудь это делает? Любые другие предложения для заметок класса в текстовом редакторе?
Спасибо!
Ответы
Ответ 1
Начиная с версии 0.8 он поддерживается изначально: больше не следует использовать какое-либо обходное решение. Синтаксис также очень прост. Это то же самое, что и латексная математика, но без включения $$
Итак, вы можете просто написать следующее для математического блока
.. math::
\frac{ \sum_{t=0}^{N}f(t,k) }{N}
Или, если вы хотите написать inline, вы можете использовать это:
:math:`\frac{ \sum_{t=0}^{N}f(t,k) }{N}`
обратите внимание на разграничивающие обратные ссылки.
UPDATE:
в новых версиях, кажется, необходимо использовать двойной обратный слэш для математических элементов, поэтому он \\frac
, а не \frac
Ответ 2
Существует встроенная поддержка роли и директивы "math"
(с использованием синтаксиса ввода LaTex) начиная с версии 0.8 (2011-07-07).
Ответ 3
Это то, что я делаю:
-
Добавить роль для математики в начале вашего документа 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
Это генерирует html с помощью rst2html
, tidies с помощью tidy
, а затем преобразует математику латекса в MathML с помощью itex2MML
, выводя на файл xhtml.
Примечания:
- Таблица стилей необязательна
- Для itex2MML перейдите здесь.
- Расширение вашего html файла должно быть xhtml или xml, иначе математика не будет отображаться в вашем браузере.
Ответ 4
LaTeX и ReST - это два решения одной и той же проблемы (разметка всего документа), и я не уверен, что кто-то будет счастлив жить внутри другого.
- LaTeX сначала, затем REST: LaTeX необходимо точно позиционировать типографские элементы, чтобы выстроить уравнения (и все остальное). ReST не принимал выход LaTeX (PostScript или аналогичный) в качестве входных данных.
- Сначала повторите попытку, затем LaTeX: вам нужно написать выходной форматтер для ReST, который выводит код LaTeX, и определять расширения в ReST, чтобы предотвратить неправильное истолкование ваших уравнений или другого явного TeX. Ваш результат от LaTeX по-прежнему будет чем-то вроде PostScript или PDF.
Я видел код для использования подмножества TeX для создания графического уравнения, которое затем втягивается в HTML или аналогичный (например, макрос Формулы Trac LaTeX), который может быть лучшим доступным решением.
Ответ 5
Проблема заключается в том, что в reST нет плагинов. Вы можете выбрать расширяемую структуру, такую как Sphinx; плагин для JSMath уже включен, а плагин для MathJax. Кроме того, Sphinx использует LaTeX для непосредственного создания PDF-документов.
Еще одно облегченное решение заключается в редактировании шаблона reST для включения MathJax, чтобы вы могли просто использовать синтаксис MathJax (LaTeX-like) в документе.
Но обычно я просто использую LaTeX напрямую для чего-то серьезного - возможности настройки этих облегченных языков разметки просто недостаточно полны для всего.
Ответ 6
Этот пункт из Docutils FAQ описывает один из способов относительно легко включить TeX-математику. Сначала вы определяете роль интерпретируемого текста, который передает уравнение непосредственно в LaTeX:
.. role:: raw-latex(raw)
:format: latex
Затем вы можете использовать эту роль в своем тексте
The area of a circle is :raw-latex:`$\pi r^2$`
В разделе "FAQ" также упоминается несколько других способов сделать это, в том числе препроцессорный подход, который можно использовать для визуализации математики для изображения при создании HTML.
Ответ 7
Немного сломайте свою проблему, первая цель - получить вывод латексного кода дословно (за исключением cgi-escapes for <, > , etch.) в html, сгенерированный с вашей легкой разметки по выбору: после того, как вы это там, это может быть легко LaTex'ed mathJax (настоятельно рекомендуется) или itex, как указано gozzilli.
Сначала я должен сказать, что использование markdown вместо ReST, вероятно, будет проще, потому что ReST использует\для экранирования, поэтому все LaTeX должны быть защищены. Для примера того, как хорошо все работает с markdown и mathJax, пойдите с настройкой mathoverflow.net.
Тем не менее, я предполагаю, что вы действительно хотите ReST (и mathJax), и в этом случае есть два пути: используйте запасную копию (и громоздкое экранирование) или добавьте некоторые обработчики LaTeX к docutils.
Вариант 1 - запасной запас:
For inline math, simply use verbatim plus whatever you tags your postprocessor is looking for: ``$x<\pi$``. For multi-line math, you want a literal block, but you need to set a class attribute for e.g. MathJaX to parse it, as it otherwise skips <pre>
tags:
.. class:: mathjax_process
::
\begin{equation}
x<\pi
\end{equation}
Вариант 2: Расширьте процессор ReST
Если вы захотите немного взломать, чтобы расширить свой процессор ReST, вы можете получить гораздо более приятную нотацию для литератур LaTeX, указав собственный текст с текстом role для встроенного латекса (например, :latex:`x<\pi`
) и пользовательского directive для многострочной математики, например
.. latex::
\begin{equation}
x<\pi
\end{equation}
Встроенная математическая нотация может быть даже сокращена до `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)
Вышеупомянутый класс будет использовать класс "латекс" для обозначения материала для обработки, поэтому вам нужно будет настроить mathJax или эквивалент искать этот класс. В качестве альтернативы, измените код выше, чтобы установить класс в "mathjax_process", который является стандартным mathJax классом переопределения.
Ответ 8
Обратите внимание, что версия 0.8 docutils (которая анализирует reStructuredText) поддерживает математику LaTeX. Для многих примеров см. http://article.gmane.org/gmane.text.docutils.user/6255. Выбор опции "-math-output": MathML, HTML, MathJax и LaTeX.
Ответ 9
Расширение разметки Pandoc позволяет встроить или отобразить математику LaTeX; вы просто помещаете это между (сразу прилегающими) знаками доллара так: $\ sqrt {-1} $, и оно обрабатывается так, как вы ожидали. Я использую эту функцию все время и не думаю, что это нецелесообразно вообще. См. Руководство http://johnmacfarlane.net/pandoc/README.html#math
После разбора уценки pandoc может писать HTML, LaTeX, ReST, RTF, DocBook, ODT, manpages и т.д. и т.д. Если математический контекст LaTeX не включает в себя причудливые пакеты LaTeX, он может даже анализировать математику в MathML, поэтому он сразу отображается в HTML или RTF. (Он предоставляет ряд возможностей для работы с математикой LaTeX в документах, отличных от LaTeX.)
Pandoc также анализирует ReST (и HTML, и не слишком причудливый LaTeX). Поэтому я надеялся дать решение с участием читателя ReSt, но, похоже, у него нет специального механизма для работы с математикой; см. обсуждение вопроса 249 http://code.google.com/p/pandoc/issues/detail?id=249 Я буду более внимательно изучать, чтобы увидеть.
Я не думаю, что кто-то приготовил плагин pandoc для Gedit еще (есть явная поддержка в emacs и в TextMate, я знаю) - это было бы потрясающе!
Ответ 10
Чтобы развернуть предыдущие ответы, я получил MathJax, работающий с ReST и Docutils, без необходимости использования LaTeX:
-
Используйте математику LaTeX в моем источнике ReST, например:
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 script загружается и применяется к HTML при просмотре. Все выглядит отлично для меня!
Большое спасибо http://www.thales.math.uqam.ca/~labbes/Sage/rst2sws/ за помощь!
UPDATE: Я заметил, что, хотя выходной HTML отлично работает в Firefox, для работы MathJax в Chrome требуется много времени, а затем он дает ошибку. Я исправил это, изменив источник script в последней строке из
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
to
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"
.
Я считаю, что причина в том, что FireFox поддерживает MathML, Chrome (Webkit, на самом деле) еще нет (по крайней мере, не полностью, вы можете протестировать поддержку своего браузера здесь).
Поскольку мне не нужно MathML, просто TeX, я использую соответствующую версию MathJax, и теперь она быстро загружается в Chrome без каких-либо ошибок. Кроме того, для вас будет намного быстрее набирать математический текс-стиль, чем стиль MathML.
Ответ 11
Вместо rst2html используйте rst2mathml.py.
Он расширяет docutils с латекс-математическим режимом. Содержимое этого режима преобразуется в MathML.
Ответ 12
Я предлагаю NoTex: он интегрировал поддержку rST с использованием LaTex только для презентационных материалов и математических уравнений. Например, в NoTex вы должны сначала записать подменю rST, например
.. |E=mc²| replace:: :math:`E = mc ^ 2`
а затем просто используйте |E=mc²|
, где это необходимо; NoTex использует LaTex для перевода его на что-то похожее на E=mc²
(без символов канала, которые указывают на подстановки rST) и он аналогичным образом отображается в HTML с использованием MathJax.