Ответ 1
Вы пробовали с Pandoc?
Я использовал 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.
Вы пробовали с Pandoc?
Возможно, mathJAX - это билет. Он построен на jsMath, старинной JavaScript-библиотеке 2004 года.
Начиная с 5 февраля 2015 года я бы переключился на рекомендацию KaTeX - самую эффективную библиотеку Javascript LaTeX от Академии Хан.
Добавьте следующий код в начало файлов 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 вместо канонической уценки, но выше все еще полезно.
Я отвечу на ваш вопрос встречным вопросом...
Что вы думаете о 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.
вы должны посмотреть на multimarkdown http://fletcherpenney.net/multimarkdown/
у него есть поддержка метаданных (заголовки, ключевые слова, дата, автор и т.д.), таблицы, asciimath, mathml, hell, я уверен, что вы можете вставить латексный математический код прямо там. это в основном расширение уценки, чтобы добавить все эти другие очень полезные функции. Он использует XSLT, поэтому вы можете легко взломать свои собственные стили LaTeX и напрямую конвертировать его. Я использую его все время, и мне это очень нравится.
Я хочу, чтобы уценка просто включала мультимаркинг. было бы неплохо.
Изменить: Multimarkdown будет создавать html, латекс и несколько других форматов. html может поставляться со списком стилей по вашему выбору. он также преобразуется в MathML, который отображается в Firefox и Safari/Chrome, если я правильно помню.
RStudio имеет хорошую бесплатную среду IDE, которая позволяет Markdown и LaTeX.
Вы можете найти mimeTeX полезный.
kramdown делает именно то, что вы описываете:
https://kramdown.gettalong.org/syntax.html#math-blocks
И он более надежный и четко определенный, чем Markdown.
Эй, это может быть не самое идеальное решение, но оно работает для меня. Я закончил создание расширения 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:)
да, но вам придется немного взломать его. Я написал фильтр, который заменяет теги латекса $\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...
Можно обрабатывать Markdown в Lua, используя код Lunamark (см. Github repo), что означает, что Markdown может быть проанализирован непосредственно макросов в Luatex и поддерживает преобразование во многие форматы, поддерживаемые Pandoc (то есть библиотека хорошо подходит для использования в сценариях lualatex
, context
, Metafun, Plain Luatex и texlua
).
Проект был начат John MacFarlane, автором Pandoc, и разработка инструментальных треков от Pandoc довольно тесно и имеет сходное (то есть превосходное) качество.
Халед Хосни написал модуль контекста, обеспечивающий удобную поддержку макросов. Michal ответ на вопрос: Есть ли какой-либо пакет с поддержкой Markdown? вопрос дает код, обеспечивающий аналогичную поддержку для латекса.
Какой язык вы используете?
Если вы можете использовать ruby, то maruku можно настроить для обработки математики с использованием различных латекс- > MathML-преобразователей. Instiki использует это. Также возможно расширить PHPMarkdown, чтобы использовать itex2MML, а также для преобразования математики. В основном, вы добавляете дополнительные шаги в движке Markdown в соответствующих точках.
Итак, с ruby и PHP это делается. Я думаю, что эти решения также могут быть адаптированы к другим языкам - я получил расширение itex2MML для создания привязок perl.
Я наткнулся на эту дискуссию только сейчас, поэтому надеюсь, что мой комментарий по-прежнему полезен. Я участвую в MathJax, и, насколько я понимаю вашу ситуацию, я думаю, что это был бы хороший способ решить проблему: вы оставляете свой код LaTeX как есть, и пусть MathJax отображает математику при просмотре.
Есть ли причина, по которой вы предпочитаете изображения?
Я искал то же самое, когда нашел teqhtml. Он преобразует уравнения $и $$ в изображения с хорошим преимуществом выравнивания результирующего изображения по вертикали с окружающим текстом. Не много документов, но это довольно просто.
Надеюсь, это поможет некоторым будущим читателям.
Извините, что создал действительно старый поток, но я использовал jemdoc для пары лет, и это действительно отлично.