Математика в реструктурированном тексте с помощью LaTeX

StackOverflow https://stackoverflow.com/questions/3610551

Вопрос

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

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

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

Как я могу использовать LaTeX в документе reST?Нужно ли будет обработать остальной документ в LaTeX, а затем перевести его в HTML, или есть лучший способ?Сделает ли markdown это проще?Я могу изменить плагин gedit, если это необходимо.

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

Спасибо!

Это было полезно?

Решение

Поскольку версия 0,8 она поддерживается врожденным: вам больше не следует использовать обходной путь. Синтаксис также очень прост. Это так же, как латексная математика, но без ограждения $$

Таким образом, вы можете просто написать следующее для математического блока

.. 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).

Вот что я делаю:

  1. Добавьте роль для математики в начале вашего документа отдыха:

    .. 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

    Это генерирует HTML с rst2html, приливов с tidy а затем преобразует латексную математику в Mathml с itex2MML, Вывод на файл XHTML.

Примечания:

  1. Стиль листа не является обязательным
  2. Для Itex2mml Go здесь.
  3. Расширение вашего HTML-файла должно быть XHTML или XML, в противном случае математика не покажет в вашем браузере.

LATEX И REST - это два решения для одной и той же проблемы (разметки всего документов), и я не уверен, что один будет счастлив, чтобы жить внутри другого.

  • Латекс сначала, затем отдых: латекс должен именно позиционировать типографские элементы, чтобы выложить уравнения (и все остальное). Отдых не будет принимать выходной выход (PostScript или аналогичный) в качестве ввода.
  • Сначала отдых, затем LATEX: вам придется писать вывод Formatter для отдыха, который выведите код латекса, и определить расширения в состоянии покоя, чтобы предотвратить неверное истолкование ваших уравнений или другого явного Tex. Ваш выход из латекса все равно будет чем-то похожим на PostScript или PDF.

Я видел код для использования подмножества Tex для создания графического уравнения, которое затем вытащено в HTML или аналогичный (например,MACRO Formula Trac), что может быть лучшим имеющимся решением.

Разрывая свою проблему немного, первая цель состоит в том, чтобы получить вывод латексного кода Verbatim (за исключением CGI-escapes для <,>, etch.) В HTML, генерируемый из вашей отметки света: как только у вас там может легко быть латексным Mathjax. (настоятельно рекомендуется) или itex. Как упомянуто Гезилли.

Сначала я должен сказать, что использование Markdown вместо отдыха, вероятно, будет проще, потому что отдых использует для выхода, поэтому весь латекс должен быть защищен. Например, как хорошо работает с отметка а также Mathjax., пойти играть с настройкой в mastoverflow.net.net.

Тем не менее, я предполагаю, что вы действительно хотите отдохнуть (и Mathjax), и в этом случае наступают два пути вперед: использование стоковых остальных (и громоздких сбежаков) или добавить несколько латексных обработчиков в документацию.

Вариант 1 - Стоковая сторона отдыха:

Для встроенной математики просто используйте Verbatim Plus, все, что вы тегируете, ваш постпроцессор ищет: `$ x < pi $` ``. Для Multi-Line Math вы хотите буквальный блок, но вам нужно установить атрибут класса для, например, MathJax для того, чтобы разбирать его, как и в противном случае пропускает <pre> Теги:

.. class:: mathjax_process

::

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

Вариант 2: Расширение вашего процессора отдыха

Если вы готовы сделать немного взлома, чтобы расширить ваш процессор отдыха, вы можете получить гораздо более приятную запись для латексных литералов, определяя пользовательский интерпретированный текст роль для встроенного латекса (например, :latex:`x<\pi`) и обычай директива Для Multi Line Math, например,

.. latex::

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

Встроенная математическая запись может быть даже сокращена до `x<\pi` Если вы используете роль по умолчанию.

Существует несколько способов реализации роли и директивы. Я приехал (примерно) следующее, которое имеет приятную особенность, которая (в отличие от большинства других взломов, которые я видел), он ухудшается к литературу латексного кода для писателей без встроенной последующей обработки.

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. переопределить класс.

Проблема в том, что в reST на самом деле нет плагинов.Вы можете выбрать расширяемый фреймворк, такой как Сфинкс;плагин для jsMath ( математика ) уже включен, и плагин для Матджакс это тоже возможно.Кроме того, Sphinx использует LaTeX для непосредственного создания PDF-документов.

Другое, более легкое решение состоит в редактировании шаблона reST для включения MathJax, чтобы вы могли просто использовать синтаксис MathJax (подобный LaTeX) в документе.

Но обычно я просто использую LaTeX напрямую для чего—нибудь серьезного - возможности настройки этих облегченных языков разметки просто недостаточно всеобъемлющи для всего.

Этот пункт С помощью Docutils FAQ описывает один путь к относительно легко включать Tex Math. Сначала вы определяете роль для интерпретированного текста, который проходит уравнение непосредственно к латему:

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

Тогда вы можете использовать эту роль в вашем тексте

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

Запись FAQ также упоминает несколько других способов сделать это, включая подход препроцессора, который можно использовать для того, чтобы сделать математику на изображение при создании HTML.

Обратите внимание, что версия 0,8 Docutils (какую реструктурный текст) поддерживает латексную математику. Видеть http://article.gmane.org/gmane.text.docutils.User/6255. для многих примеров. Выбор варианта «-мат-вывода»: MathML, HTML, MathJax и Latex.

Расширение Pandoc markdown позволяет выполнять встроенную или отображаемую математику LaTeX;вы просто помещаете его между (непосредственно примыкающими) знаками доллара вот так:$ \ sqrt {-1} $ 's, и это обрабатывается так, как вы ожидали.Я постоянно пользуюсь этой функцией и вовсе не считаю ее непрактичной.Смотрите руководство пользователя http://johnmacfarlane.net/pandoc/README.html#math

Как только markdown проанализирован, pandoc может писать HTML, LaTeX, ReST, RTF, DocBook, ODT, manpages и т.д. и т.п.Если математический контекст LaTeX не включает в себя модные пакеты LaTeX, он может даже проанализировать математику в MathML, поэтому он сразу же отображается в HTML или RTF.(Он предоставляет ряд опций для работы с LaTeX math в документах, отличных от LaTeX.)

Pandoc также анализирует ReST (и HTML, и не слишком навороченный LaTeX).Таким образом, я надеялся дать решение с участием ReSt reader, но, похоже, в нем нет специального механизма для работы с математикой;смотрите обсуждение вопроса 249 http://code.google.com/p/pandoc/issues/detail?id=249 Я еще раз изучу более внимательно, чтобы увидеть.

Я не думаю, что кто-то еще создал плагин pandoc для Gedit (я знаю, что в emacs и TextMate есть продуманная поддержка) - это было бы потрясающе!

Расширить предыдущие ответы, вот как я получил Mathjax. работать с Отдых а также Докутилс, не требуя латекса:

  1. Используйте математику в стиле латекса в моем источнике отдыха, например:

    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, действительно) еще не (по крайней мере, не полностью; вы можете проверить поддержку вашего браузера здесь).

Поскольку у меня нет необходимости Mathml, просто Tex, я использую соответствующую версию MathJax, и теперь она быстро загружается в Chrome без ошибок. Кроме того, для вас было бы намного быстрее, чтобы набрать математический текст в стиле Mathml.

Вместо использования RST2HTML rst2mathml.py..

Он расширяет Docutils с режимом латекса-математики. Содержимое этого режима преобразуется в MathML.

Я предложил Несущественный: Он включил поддержку RST с помощью латекса только для презентационных материалов и уравнений математики. Например в Несущественный Вы бы написали первое замена RST, как

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

а потом просто использовать |E=mc²| где вам это нужно; Несущественный использует латекс, чтобы перевести его на что-то, что выглядит как E=mc² (Без символов трубы, которые указывают на замены RST), и он отображается аналогично в HTML с использованием MathJax.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top