When minimal-mistakes-plus is enabled in your Minimal Mistakes themed project you can write posts or pages in Org Mode while keeping the existing Markdown method, that is, you now have a dual-drafting method! When composing an article you can choose either method at will.

This article itself, as well as most articles on this site, is written in Org Mode. It also serves as a demonstration of this feature.

You can do everything in the original Markdown way, which is kept intact. When drafting in Org Mode certain features non-native to Org Mode are also supported, such as the following:

  • Front matter
  • Liquid syntax
  • Figure: For showcasing an image in a gallery view.
  • Gallery: For showcasing multiple images or an album in a gallery view.

The following contents demonstrate the basic Org Mode elements and the extra features aforementioned.

Headings

Custom ID

In Markdown you can write the attribute syntax {: id="your-custom-id"} to assign a custom ID to a heading. In Org you can achieve the same by using the conventional CUSTOM_ID in a property drawer.

Topdown IDs and ID Deduplication

By default, heading id-s are generated automatically by transforming the heading to a hyphenated string. By adding heading_ids: topdown in the front matter you can enable topdown IDs, which are generated by concatenating for each heading all the id-s of its parent headings, if any. For example,

* Heading 1
# id: heading-1
** Foo
# id: heading-1-foo
*** Bar
# id: heading-1-foo-bar
* Heading 2
# id: heading-2
** Foo
# id: heading-2-foo
*** Bar
# id: heading-2-foo-bar

At any rate, there is a duplication check during the generation. If a duplicate ID is found, a number will be appended incrementally.

However, CUSTOM_ID is never affected.

Auto Numbering

Headings can be numbered automatically for the whole document or only a subtree. To enable this add use either of the following methods:

  • For all headings: Add ordered: true to the front matter of the page.
  • For all headings under a subtree: Add the attribute {: .ordered} right under a subtree heading. All of its sub-headings will be numbered.

The numbers appear in both the page content and the table of contents.

If a heading is marked with {: .ordered} the numbering of its sub-headings always starts from 1. regardless of its level in the document or its position relative its siblings.

If both ordered: true and {: .ordered} are present for a heading, the rules of the latter override those of the former.

For example:

---
title: "Numbering All Headings"
permalink: /docs/headings/
toc: true
ordered: true
---

* Heading 1
** Heading 2
*** Heading 3
**** Heading 4
***** Heading 5
****** Heading 6
* Heading 1
** Heading 2
*** Heading 3
**** Heading 4
***** Heading 5
****** Heading 6

becomes:

1. Heading 1
1.1. Heading 2
1.1.1. Heading 3
1.1.1.1. Heading 4
1.1.1.1.1. Heading 5
1.1.1.1.1.1. Heading 6
2. Heading 1
2.1. Heading 2
2.1.1. Heading 3
2.1.1.1. Heading 4
2.1.1.1.1. Heading 5
2.1.1.1.1.1. Heading 6

And this:

---
title: "Numbering Subtrees"
permalink: /docs/headings/
toc: true
---

* Heading 1
{: .ordered}
** Heading 2
*** Heading 3
**** Heading 4
{: .ordered}
***** Heading 5
****** Heading 6
* Heading 1
** Heading 2
*** Heading 3
{: .ordered}
**** Heading 4
***** Heading 5
****** Heading 6

becomes:

* Heading 1
1. Heading 2
1.1. Heading 3
1.1.1. Heading 4
      1. Heading 5
      1.1. Heading 6
* Heading 1
** Heading 2
*** Heading 3
   1. Heading 4
   1.1. Heading 5
   1.1.1. Heading 6

Tables

A simple Org table:

Col1 Col2 Col3
foo foo1 Hello World
bar bar1 Hello World

Complex Tables

A complex Org table which contains line-wrapping cells, column- and row-spanning cells:

#+ATTR_ARGS: :complex t :newlines t
| Col1 | Col2   | Col3    |
|------+--------+---------|
| foo  | foo1   | Hello   |
|      |        | World   |
|------+--------+---------|
| bar  | <span  | >       |
|------+--------+---------|
|      |        |         |
| zoo  | ------ | ------- |
|      |        |         |
|------+--------+---------|
| zoo  |        | Hello   |
| zoo  | ------ | World   |
|      |        |         |
Col1 Col2 Col3
foo foo1 Hello
World
bar
zoo
zoo
zoo
Hello
World

A complex Org table like this isn’t natively supported by either Org Mode or org-ruby, and is solely supported by Minimal Mistakes Plus!

  1. A table is processed specially as a complex table only when it’s marked by #+ATTR_ARGS: :complex t.
  2. When it’s a complex table rows are delimited by horizontal rulers, not lines.
  3. The first row is always interpreted as the header row.
  4. Column-spanning is indicated by the notation <span ... >. To merge several columns of the same row you put <span in the first cell and > in the last.
  5. Row-spanning is recognized automatically when there isn’t a horizontal ruler across several cells in a column but there are rulers across the cells of the same rows in other columns.
  6. #+ATTR_ARGS: can take other arguments:

    • :newlines: Whether to preserve newlines in the output HTML, either as <br> or linefeeds. If nil or unset, don’t preserve newlines, i.e., strip off all <br> and linefeeds in the cell. If t preserve newlines as <br>.

Another example:

Word Sensory Anchor Mental Image
kasukani The Radio A radio signal fading out. You have to strain your ears to hear if the music is even still playing.
honokani The Candle A candle in a dark room. The light is soft, flickering, and has a warm, “emotional” quality.
honnonito The Peach The skin of a peach or a baby’s cheek. A soft, warm pinkish glow that bleeds into the surface.
ussurato The Veil A thin layer of mist over a lake or a dusting of powdered sugar on a cake.

An Emacs built-in table (provided by table.el):

+------+------+-------+
| Col1 | Col2 | Col3  |
+======+======+=======+
| foo  | foo1 | Hello |
|      |      | World |
+------+------+-------+
| bar  |              |
+------+------+-------+
|      |      |       |
| zoo  +------+-------+
|      |      |       |
+------+------+-------+
Col1 Col2 Col3
foo foo1 Hello World
bar
zoo
  • No need for #+ATTR_ARGS: :complex t.

Lists

An ordered list with multiple levels:

  1. First item

    Hello world!
  2. Second item

    1. Sub-item A (Indented 3 spaces)

      Some text

      1. Sub-item A (Indented 3 spaces)
      2. Sub-item A (Indented 3 spaces)

        1. Sub-item A (Indented 3 spaces)
        2. Sub-item A (Indented 3 spaces)
      3. Sub-item A (Indented 3 spaces)
    2. Sub-item B

      • Deeply nested bullet (Indented another 3 spaces)
      • Deeply nested bullet (Indented another 3 spaces)
  3. Third item

Links

In addition to standard Org links, minimal-mistakes-plus facilitates the composing of links in the following ways:

Link to a Post

  • Link to a page in the same project
  • Link to a page in another project
  • Link to a page using org links
Link to a [post]({{ site.baseurl }}{% post_url 2026-02-20-custom-gallery %})

Images

A simple image:

https://i.postimg.cc/Vv8jFw8D/unsplash-gallery-image-1.jpg

A figure:

This is a figure alt text
This is a figure caption
A gallery (with [customization]({{ site.baseurl }}{% post_url 2026-02-20-custom-gallery %})):
This is a gallery caption

Code highlighting

Inline codes: print, hello

Inline codes: ~github: “josephtesfaye/minimal-mistakes-plus”~,

Using : to start a line of code:

descriptor + subject + taxonomic rank

Using structure template (code block):

def print_hi(name)
  puts "Hi, #{name}"
end
print_hi('Tom')

#=> prints 'Hi, Tom' to STDOUT.

Text block:

Hello
{% include gallery columns=6 caption="My custom gallery" %}
{% include gallery columns=6 caption="My custom gallery" %}

Notices

You can write notices similarly to Markdown.

For One Line or Paragraph

{: .notice}
*Watch out!* This is a notice inside an Org file.

{: .notice--primary}
*Watch out!* This is a primary notice inside an Org file.

{: .notice--info}
*Watch out!* This is an info notice inside an Org file.

{: .notice--warning}
*Watch out!* This is a warning notice inside an Org file.

{: .notice--success}
*Watch out!* This is a success notice inside an Org file.

{: .notice--danger}
*Watch out!* This is a danger notice inside an Org file.

Watch out! This is a notice inside an Org file.

Watch out! This is a primary notice inside an Org file.

Watch out! This is an info notice inside an Org file.

Watch out! This is a warning notice inside an Org file.

Watch out! This is a success notice inside an Org file.

Watch out! This is a danger notice inside an Org file.

For Block Contents

You can put a block of contents in a notice in the following styles:

Style 1

Using <div class="notice--type" org="1">:

<div class="notice" org="1">
*Bold Text:* Plain text. A [[#images][link]].

A list:

- Item 1
- Item 2

A code block:

#+begin_src html
<html>
  <body>Hello World!<body>
</html>
#+end_src
</div>

Bold Text: Plain text. A link.

A list:

  • Item 1
  • Item 2

A code block:

<html>
  <body>Hello World!<body>
</html>

Style 2

Using {% capture <id> %}:

{% capture notice-1 %}
*Bold Text:* Plain text. A [[#images][link]].

A list:

- Item 1
- Item 2

A code block:

#+begin_src html
<html>
  <body>Hello World!<body>
</html>
#+end_src
{% endcapture %}

<div class="notice">{{ notice-1 | orgify }}</div>

Bold Text: Plain text. A link.

A list:

  • Item 1
  • Item 2

A code block:

<html>
  <body>Hello World!<body>
</html>

Style 3

Using straight HTML:

#+begin_html
<div class="notice">
  <p><b>Bold Text:</b> Plain text. A <a href="#images">link</a>.</p>
  <p>A list:</p>
  <ul>
    <li>Item 1</li>
    <li>Item 2</li>
  </ul>
  <p>A code block:</p>
  <div class="language-html highlighter-rouge">
    <div class="highlight">
      <pre class="highlight"><code><span class="nt">&lt;html&gt;</span>
  <span class="nt">&lt;body&gt;</span>Hello World!<span class="nt">&lt;body&gt;</span>
<span class="nt">&lt;/html&gt;</span></code></pre>
    </div>
  </div>
</div>
#+end_html

Bold Text: Plain text. A link.

A list:

  • Item 1
  • Item 2

A code block:

<html>
  <body>Hello World!<body>
</html>

Updated: