4

I am using the LaTeX markdown package to insert quick notes in my document. I would like Emacs to switch to markdown mode inside the markdown environment so it for example won't automatically re-indent markdown nested lists.

Here is an excerpt of the latex file:

\chapter{Introduction}
\label{chap:intro}

\begin{markdown}

Here's what'll be in this chapter:
* thing 1
* thing 2
    - aspect A
    - aspect B

\end{markdown}

In this chapter, we describe ...

Is there a way to change Emacs behavior without the need to invoking markdown mode manually each time I want to edit the inside of the environment?

Jindra Helcl
  • 143
  • 4

1 Answers1

5

You can use mmm-mode available at GNU Elpa.

There are examples how mmm-mode is to be configured.

In your case the following Elisp lines in your init file should work.

When you open a LaTeX file with markdown environments those are highlighted in grey. If you put point within those regions markdown-mode becomes active (e.g., indentation). When you write a new markdown environment per hand you should run Parse Block from the MMM menu. This is automagically done for you if you insert a markdown environment by C-c C-e (bound to LaTeX-environment).

(require 'mmm-auto)
(setq mmm-global-mode 'maybe)
(mmm-add-classes
 '((latex-markdown
    :submode markdown-mode
    :face mmm-declaration-submode-face
    :front "\\\\begin{markdown}"
    :delimiter-mode nil
    :back "\\\\end{markdown}")))
(mmm-add-mode-ext-class 'latex-mode nil 'latex-markdown)

(defun my-LaTeX-parse-block-after-insert-environment (env _b _e)
  "Parse MMM block after inserting a markdown environment.
`mmm-parse-block' is only called when ENV is \"markdown\"."
  (when (string-equal env "markdown")
    (mmm-parse-block 3)))

(add-hook 'LaTeX-after-insert-env-hook #'my-LaTeX-parse-block-after-insert-environment)
Tobias
  • 32,569
  • 1
  • 34
  • 75