Подтвердить что ты не робот

Математика в реструктурированном тексте с LaTeX

Я хотел бы использовать легкий язык разметки, чтобы делать заметки в своих школьных классах.

Мой редактор выбора - gedit, и я нашел reStructuredText Tools для Gedit, который запустит процессор reStructuredText и отобразит HTML в панели в gedit. Это здорово, и 80% от этого пути.

Но для многих моих классов мне нужно включить в мои заметки математические уравнения или греческие символы. Хотя я не очень хорошо знаком с LaTeX, я понимаю, что он обладает этими возможностями.

Как я могу использовать LaTeX в документе reST? Будет ли документ reST необходимо обработать в LaTeX, затем отобразить в HTML, или есть лучший способ? Уценка сделает это проще? При необходимости я могу изменить плагин gedit.

Наконец, кто-нибудь это делает? Любые другие предложения для заметок класса в текстовом редакторе?

Спасибо!

4b9b3361

Ответ 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.