Из MSDN
В следующем примере кода показана поддержка ковариации и контравариантности для групп методов
static object GetObject() { return null; } static void SetObject(object obj) { } static string GetString() { return ""; } static void SetString(string str) { } static void Test() { // Covariance. A delegate specifies a return type as object, // but you can assign a method that returns a string. Func
Думаю, вы можете использовать исходный код latex-preview для вдохновения или pretty-lambda (гораздо более простая программа).
В качестве альтернативы вы можете преобразовать уценку в HTML в фоновом процессе и предварительно просмотреть HTML.
В Emacs возможно все, но не все легко достигается: -)
Если речь идет только о рендеринге, воспользуйтесь предложением Божидара и выполните преобразование Markdown в HTML, а затем отобразите HTML в буфере W3. markdown-mode содержит код для вызова внешней команды Markdown с несколькими плюсами.
Но если вы действительно хотите делать все в Emacs Lisp, вам придется сначала написать парсер Markdown.
Поскольку я не знаю ни об одном парсере Markdown на базе emacs, я должен сказать, что вам придется написать его с нуля. Возможно, этот вопрос SO может навести вас на некоторые мысли.
Если вы решите пойти по пути только Emacs, то Semantic - отличный API для этой работы (он предлагает вам лексер, парсер-генератор и парсер; он существует уже более десяти лет, и у него есть документация!) После создания парсера языка вам нужно будет сделать несколько функций рендеринга для каждого типа токенов. И таким образом вы сможете настроить все под себя.
Хотя это было бы познавательно, я бы все же предпочел использовать существующий конвертер Markdown->html в отдельном фоновом процессе, а затем использовать w3(m) для предварительного просмотра в emacs (как предложил Божидар). Это поможет выполнить работу, и сделать это гораздо проще. Никаких серьезных проблем с производительностью тоже нет - вы должны запускать этот инструмент довольно редко, так что вы легко можете выделить несколько лишних миллисекунд).
Смешанным решением было бы заставить парсер Markdown генерировать HTML напрямую, и просматривать его в буфере w3(m) (это снимает с ваших плеч всю нагрузку по рендерингу, вам нужно только транслитерировать Markdown в html, и это кажется довольно простым с Semantic).