Как я могу смешивать LaTeX с Markdown?

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

The refinement relation is written $a \sqsubseteq b$, which can be 
pronounced "$a$ approximates $b$" or "$b$ is at least as defined as $a$".

Я хотел бы иметь возможность взять каждый фрагмент LaTeX и предварительно обработать его в хороший сглаженный PNG файл, который затем я мог бы включить в свой Markdown через тег HTML <img>. Но я не знаю, как взять фрагмент LaTeX и получить приятный образ, который

  • Имеет правильный ограничивающий прямоугольник
  • Сглаживание

Все, что я умею делать, это получить полные страницы в форматах DVI, PostScript или PDF.

Я уверен, что эта проблема решена, но я не смог угадать правильные условия поиска. Любые предложения по его решению или поиску существующего решения?


EDIT: установив mathTeX, я могу сказать, что код негибкий, что он нарушает стандарт иерархии файловой системы Linux и что это любительская работа - как в хороших, так и в плохих чувствах этого слово. Код настолько сложный, что очевидных ошибок нет. Я буду искать альтернативы.

Также ясно, что в основе решения лежат dvipng.


ОДИН ГОД ПОСЛЕ. Я никогда не получал плавной интеграции, на которую я надеялся, но я хромаю в script своих собственных разработок. Оказывается, вместо dvipng немного проще использовать dvips -E и convert программу ImageMagick. Преимущества - это немного больше контроля над такими вещами, как масштабирование и простота создания прозрачного фона. Любопытный может проверить этот пример.

Я не могу рекомендовать это решение никому. Но я не могу рекомендовать MathTeX.

Ответ 1

Вы пробовали с Pandoc?

Ответ 2

Возможно, mathJAX - это билет. Он построен на jsMath, старинной JavaScript-библиотеке 2004 года.

Начиная с 5 февраля 2015 года я бы переключился на рекомендацию KaTeX - самую эффективную библиотеку Javascript LaTeX от Академии Хан.

Ответ 3

Добавьте следующий код в начало файлов Markdown, чтобы получить поддержку рендеринга MathJax

<style TYPE="text/css">
code.has-jax {font: inherit; font-size: 100%; background: inherit; border: inherit;}
</style>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
    tex2jax: {
        inlineMath: [['$','$'], ['\\(','\\)']],
        skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'] // removed 'code' entry
    }
});
MathJax.Hub.Queue(function() {
    var all = MathJax.Hub.getAllJax(), i;
    for(i = 0; i < all.length; i += 1) {
        all[i].SourceElement().parentNode.className += ' has-jax';
    }
});
</script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

а затем `$ x ^ 2 $` или `$$ x ^ 2 $$` будет отображать как ожидалось: -)

Вы всегда можете установить локальную версию MathJax, если вы не хотите использовать онлайн-дистрибутив, но вам может потребоваться разместить его через локальный веб-сервер.

UPDATE: в настоящее время я использую pandoc вместо канонической уценки, но выше все еще полезно.

Ответ 4

Я отвечу на ваш вопрос встречным вопросом...

Что вы думаете о Org-режиме? Это не так чисто, как Markdown, но это Markdown-like, и я считаю, что это легко работать, и это позволяет встраивать Latex. Ср http://www.gnu.org/software/emacs/manual/html_node/org/Embedded-LaTeX.html

Postscript

Если вы не смотрели на org-mode, у него есть одна большая сила в качестве общего "естественного языка разметки" над Markdown, а именно для обработки таблиц. Источник:

| 1 | 0 | 0 |
| -1 | 1 | 0 |
| -1 | -1 | 1 |

представляет собой то, что, по вашему мнению, будет...

И латекс визуализируется на куски с использованием превью-латекса tex-mode.

Ответ 5

вы должны посмотреть на multimarkdown http://fletcherpenney.net/multimarkdown/

у него есть поддержка метаданных (заголовки, ключевые слова, дата, автор и т.д.), таблицы, asciimath, mathml, hell, я уверен, что вы можете вставить латексный математический код прямо там. это в основном расширение уценки, чтобы добавить все эти другие очень полезные функции. Он использует XSLT, поэтому вы можете легко взломать свои собственные стили LaTeX и напрямую конвертировать его. Я использую его все время, и мне это очень нравится.

Я хочу, чтобы уценка просто включала мультимаркинг. было бы неплохо.

Изменить: Multimarkdown будет создавать html, латекс и несколько других форматов. html может поставляться со списком стилей по вашему выбору. он также преобразуется в MathML, который отображается в Firefox и Safari/Chrome, если я правильно помню.

Ответ 6

RStudio имеет хорошую бесплатную среду IDE, которая позволяет Markdown и LaTeX.

Ответ 7

Вы можете найти mimeTeX полезный.

Ответ 9

Эй, это может быть не самое идеальное решение, но оно работает для меня. Я закончил создание расширения Python-Markdown LaTeX.

https://github.com/justinvh/Markdown-LaTeX

Он добавляет поддержку встроенных математических и текстовых выражений с использованием синтаксиса $math $и% text%. Расширение является препроцессором, который будет использовать латекс /dvipng для генерации png для соответствующих уравнений/текста, а затем base64 кодирует данные для непосредственного изображения изображений, а не для внешних изображений.

Затем данные помещаются в файл кеширования с простыми разделителями, который кодирует выражение в представлении base64. Это ограничивает количество времени, в течение которого должен выполняться латекс.

Вот пример:

%Hello, world!% This is regular text, but this: $y = mx + b$ is not.

Выход:

$ markdown -x latex test.markdown
<p><img class='latex-inline math-false' alt='Hello, world!' id='Helloworld' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFwAAAAQBAMAAABpWwV8AAAAMFBMVEX///8iIiK6urpUVFTu7u6YmJgQEBDc3NxERESqqqqIiIgyMjJ2dnZmZmbMzMwAAAAbX03YAAAAAXRSTlMAQObYZgAAAVpJREFUKM9jYICDOgb2BwzYAVji8AQg8fb/PZ79u4AMvv0Mrz/gUA6W8F7AmcLAsJuBYT7Y1PcMfLiUgyWYF/B8Z2DYAVReABKrZ2DHpZwdopzrA0nKOeHKj66CKOcKPQJWwJo2NVFhfwCQyymhYwCUYD0avIApgYFh2927/QUcE3gDwMpvMhRCDJzNMIPhKZg7UW8DUOIMg9sCPgGo6e8ZODeAlAP9xLEArNy/IIwhAMx9D3IM+3cgi70BqnxZaNQFkHJWAQbeBrByjgURExaAuc9AyjnB5hjAlEO9ygVXzrplpskEMPchQvkBmGMcGApgjjkAVs7yhyWVAcwFK2f/AlJeAI0m5gMsEK+aMhQ6aDuA1DcDIZirBg7IOwxlB5g2QBJBF8OZVUz95hqfC3hOXWGYrwBSHskwk4EByGXab8QAlOBaGizFKYAtUlgUGEgBTCSpZnDCLQUA+y6MXeYnPDgAAAAASUVORK5CYII='> This is regular text, but this: <img class='latex-inline math-true' alt='y = mx + b' id='ymxb' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFIAAAAOBAMAAABOTlYkAAAAMFBMVEX///9ERETu7u4yMjK6urp2dnZUVFSIiIjMzMwQEBDc3NwiIiJmZmaYmJiqqqoAAADS00rKAAAAAXRSTlMAQObYZgAAAOtJREFUKM9jYCAACsCk4wYGgiABTLInEKuS+QGxKvkVGBj47jBwI8tcffI84e45BoZ7GVcLECo9751iWLeSoRPITBQEggMMDBy9sxj2MDgz8DIE8yCpPMxwjWFBGUMMkpFcbAEMvxjKGLgYxIE8NkHBiYIyQMY+hmoGhi0Mdsi2czawbGCQBTJ+ILvzE0MaA9MHIIWwnWE9A+sBpk8LGDgmMCnAVXJNYPgCJHhRQvUiA/cDXoECZx4DXoSZTBtYgaaEPw5AVnkOGBRc5xTcbsReQrL9+nWwyxbgC88DcJZ+QygDcYD1+QPiFAIAtLA8KPZOGFEAAAAASUVORK5CYII='> is not.</p>

Как вы можете видеть, это подробный вывод, но это действительно не проблема, поскольку вы уже используете Markdown:)

Ответ 10

да, но вам придется немного взломать его. Я написал фильтр, который заменяет теги латекса $\some\inline\latex$ или $$\some\equation$$ соответствующими тегами изображения на mimetex.cgi script. Это заняло все 5 минут.

Предупреждение: эффектно уродливое...

#!/usr/bin/env python
import sys, markdown,re

MIMETEX_LOC="http://some.server.com/cgi-bin/mimetex.cgi"

def sanitizeLatex(text):
    return re.sub(r"\\",r"%5C", text)

def wrapLatexBlock(text):
    return '<img alt="equation" class="block" src="%s?%s"></img>'%(MIMETEX_LOC,text)

def wrapLatexInline(text):
    return '<img alt="equation" class="inline" src="%s?%s"></img>'%(MIMETEX_LOC,text)

def prepLatexBlock(matchobj):
    return wrapLatexBlock(sanitizeLatex(matchobj.group()[2:-2]))

def prepLatexInline(matchobj):
    return wrapLatexInline(sanitizeLatex(matchobj.group()[1:-1]))


if __name__ == "__main__":
    # initialise markdown
    md=markdown.Markdown()
    raw_md=open(sys.argv[1],"r").read()

    ##
    # deal with embedded latex
    ##
    raw_md=re.sub(r'\$\$(.*?)\$\$',prepLatexBlock, raw_md)
    raw_md=re.sub(r'\$(.*?)\$',prepLatexInline, raw_md)

    ##
    # once latex is parsed, convert md to html
    ##
    main_html=md.convert(raw_md)

    # hey presto!
    print(main_html)

Конечно, вы должны сами определить подходящий css для изображений .block и .inline...

Ответ 11

Можно обрабатывать Markdown в Lua, используя код Lunamark (см. Github repo), что означает, что Markdown может быть проанализирован непосредственно макросов в Luatex и поддерживает преобразование во многие форматы, поддерживаемые Pandoc (то есть библиотека хорошо подходит для использования в сценариях lualatex, context, Metafun, Plain Luatex и texlua).

Проект был начат John MacFarlane, автором Pandoc, и разработка инструментальных треков от Pandoc довольно тесно и имеет сходное (то есть превосходное) качество.

Халед Хосни написал модуль контекста, обеспечивающий удобную поддержку макросов. Michal ответ на вопрос: Есть ли какой-либо пакет с поддержкой Markdown? вопрос дает код, обеспечивающий аналогичную поддержку для латекса.

Ответ 12

Какой язык вы используете?

Если вы можете использовать ruby, то maruku можно настроить для обработки математики с использованием различных латекс- > MathML-преобразователей. Instiki использует это. Также возможно расширить PHPMarkdown, чтобы использовать itex2MML, а также для преобразования математики. В основном, вы добавляете дополнительные шаги в движке Markdown в соответствующих точках.

Итак, с ruby ​​и PHP это делается. Я думаю, что эти решения также могут быть адаптированы к другим языкам - я получил расширение itex2MML для создания привязок perl.

Ответ 13

Я наткнулся на эту дискуссию только сейчас, поэтому надеюсь, что мой комментарий по-прежнему полезен. Я участвую в MathJax, и, насколько я понимаю вашу ситуацию, я думаю, что это был бы хороший способ решить проблему: вы оставляете свой код LaTeX как есть, и пусть MathJax отображает математику при просмотре.

Есть ли причина, по которой вы предпочитаете изображения?

Ответ 14

Я искал то же самое, когда нашел teqhtml. Он преобразует уравнения $и $$ в изображения с хорошим преимуществом выравнивания результирующего изображения по вертикали с окружающим текстом. Не много документов, но это довольно просто.

Надеюсь, это поможет некоторым будущим читателям.

Ответ 15

Извините, что создал действительно старый поток, но я использовал jemdoc для пары лет, и это действительно отлично.