2017-02-22 7 views
2

Я использую emacs в режиме markdown для предварительного просмотра документа с уценкой, но на странице HTML, предварительно просмотренной после ввода C-x C-x p, нет оглавления.Как сделать оглавление в режиме уценки?

cat ~/.emacs

(add-to-list 'load-path "~/.emacs.d") 

(autoload 'markdown-mode "markdown-mode" 
    "Major mode for editing Markdown files" t) 
(add-to-list 'auto-mode-alist '("\\.markdown\\'" . markdown-mode)) 
(add-to-list 'auto-mode-alist '("\\.md\\'" . markdown-mode)) 

(autoload 'gfm-mode "markdown-mode" 
    "Major mode for editing GitHub Flavored Markdown files" t) 
(add-to-list 'auto-mode-alist '("README\\.md\\'" . gfm-mode)) 

(custom-set-variables 
'(markdown-command "/usr/bin/pandoc --toc -f markdown_github -t html")) 

PS: Я могу использовать команду pandoc pandoc --toc -f markdown_github сделать HTML-страницу с оглавлением из уценки документа.

Как это решить? Thx в продвинутом!

+0

Обратите внимание, что TOC является нестандартной функцией и, следовательно, может не существовать во всех реализациях Markdown. Я не знаком с тем, какие функции поддерживаются режимом markdown от emacs, но я был бы удивлен, если бы нестандартные функции работали так же, как Pandoc. – Waylan

+0

@Waylan, 'markdown-preview' должен вызывать' markdown-command' (который здесь установлен в Pandoc с флагом '--toc'). 'markdown-mode' не требует поддержки каких-либо функций Pandoc напрямую. – Chris

ответ

0

Если у вас есть дисциплина, чтобы вставить именованные якоря под ваши заголовками, как это:

## My heading 
<a name="My heading"></a> 
foo bar 

My other heading 
================ 
<a name="My other heading"></a> 
baz qux 

Тогда следующая функция должна быть разумной отправной точка (не различает уровни заголовков или что-нибудь, просто мало PoC).

(defun my/make-markdown-toc() 
    "Makes a markdown ToC at the top of a md document." 
    (interactive) 
    (save-excursion 
    (goto-char (point-min)) 
    (let ((list-of-headings)) 
     (while (search-forward-regexp markdown-regex-header nil 'noerror) 
    (if (match-string 5) 
     (push (match-string 5) list-of-headings)) 
    (if (match-string 1) 
     (push (match-string 1) list-of-headings))) 
     (message "I found %s matches" (length list-of-headings)) 
     (goto-char (point-min)) 
     (dolist (heading (reverse list-of-headings)) 
    (insert "1. [" heading "](#" heading ")\n"))))) 

Обратите внимание, что тяжёлый подъем выполняется только за счет заимствования выражений режима уценки для заголовков.

2

Это очень просто с пакетом markdown-toc, в melpa. Просто назовите его M-x.

источник: http://wikemacs.org/wiki/Markdown#Generate_a_table_of_content

Если у вас есть много одинаковых названий, якоря должны быть выделены, и вы будете полагаться на НОМ markdown-toc.

+0

Ха, я должен был сначала проверить пакет репозиториев. :) – JosefAssad

Смежные вопросы