#+begin_..
.. #+end_..
constructs recognized by Ox-hugo.
1 HTML5 inline elements #
Org special blocks created using the HTML tags defined in
org-blackfriday-html5-inline-elements
will export as inline HTML.
#+begin_INLINETAG
something
#+end_INLINETAG
will export as:
<INLINETAG>something</INLINETAG>
For example, mark
is one of those inline elements. So,
#+begin_mark
This sentence is marked.
#+end_mark
will export as:
<mark>This sentence is marked.</mark>
and render as:
This sentence is marked.
2 HTML5 block elements #
Org special blocks created using the HTML tags defined in
org-html-html5-elements
will export as HTML blocks wrapped by those
tags.
#+begin_BLOCKTAG
something
#+end_BLOCKTAG
will export as:
<BLOCKTAG>
something
</BLOCKTAG>
For example, aside
is one of those HTML5 block elements. So,
#+begin_aside
Some content for the ~aside~ block.
#+end_aside
We can even make the ~aside~ block /aside-like/ with
[[https://developer.mozilla.org/en-US/docs/Web/HTML/Element/aside][this little CSS]].
will export as:
<aside>
Some content for the `aside` block.
</aside>
We can even make the `aside` block _aside-like_ with
[this little CSS](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/aside).
and render as:
We can even make the aside
block aside-like with this little CSS.
3 Details and Summary #
details
is one of the HTML5 block elements, but it is treated
as a separate case because we also need to support the nested inline
summary
tag in there.
#+begin_details
#+begin_summary
This is summary.
#+end_summary
Here are the details.
#+end_details
See Details and Summary .
4 HTML Attributes #
HTML attributes can be added to the first tag of any of the above
Special Blocks using the #+attr_html
syntax. The class
attribute,
for instance, is very handy.
For example, if we want the marked text to have red foreground color, we can do:
#+begin_export html
<style>
.red {
color: red;
}
</style>
#+end_export
#+attr_html: :class red
#+begin_mark
This marked text's foreground is red.
#+end_mark
You may choose to have a CSS snippet like above either inline in the exported Markdown, or in your website’s CSS file.
and that will render as:
This marked text’s foreground is red.
5 Description #
The #+begin_description
.. #+end_description
special block can be
used to set the description
front-matter variable.
This allows the description to be written in a well-formatted fashion with Org markup and it can be multi-line too.
As an example:
#+begin_description
Here is my *post summary*.
And this can be over /multiple lines/ too!
#+end_description
Above will export as this in the TOML front matter:
description = """
Here is my **post summary**.
And this can be over _multiple lines_ too!
"""
6 Hugo Paired Shortcodes #
See
HUGO_PAIRED_SHORTCODES
.
7 Other Special Blocks (div
tags) #
If the Special Block tag used isn’t found in
org-blackfriday-html5-inline-elements
or org-html-html5-elements
,
that block exports just as an HTML div
block.
#+begin_SOMETHING
Content inside something.
#+end_SOMETHING
exports as:
<div class="SOMETHING">
Content inside something.
</div>
and renders as:
Content inside something.
If we want to reuse the .red
CSS rule defined above, we can type:
#+begin_red
This text will be in red.
#+end_red
which will render as:
This text will be in red.
See the Whitespace Trimming section if you need to export with
<span>
tags instead of <div>
tags.
8 Raw Org contents #
By default, the content inside the Org special blocks will have some
default processing done by the exporter – Org entities like \sum
will
be replaced by its HTML entity ∑
, foo_{bar}
will be replaced
with foo<sub>bar</sub>
, and so on.
But the user might want to keep the contents of the special block as-as, in its raw form, for some special block types. If the user wants to do this for a special block of the type FOO:
#+begin_FOO
Some content
#+end_FOO
, they need to add ("FOO" . (:raw t))
to the customization variable
org-hugo-special-block-type-properties
.
By default , ("katex" . (:raw t))
is added to this list. So when
using a special block like,
#+begin_katex
E = -J \sum\_{i=1}^N s\_i s\_{i+1}
#+end_katex
, the equation in the content of that special block: E = -J \sum\_{i=1}^N s\_i s\_{i+1}
will be exported to Markdown as-is.
As an another example, if you have a special block for the Mermaid
diagramming markup, and you need to write special blocks like below
which has one of the HTML reserved characters (>
),
#+begin_mermaid
flowchart TD
Start --> Stop
#+end_mermaid
you will need to export the content of that shortcode in raw Org. To do so, you can add something like this to your config:
(with-eval-after-load 'ox-hugo
(add-to-list 'org-hugo-special-block-type-properties '("mermaid" . (:raw t))))
9 TikZJax #
ox-hugo
supports exporting raw tikz snippet to Markdown which can be
rendered to images using the TikZJax project.
To use this feature, ensure that the TikZJax scripts are loaded in
the HTML <head>
(you will need to tweak your site’s Hugo template
for that):
<link rel="stylesheet" type="text/css" href="https://tikzjax.com/v1/fonts.css">
<script src="https://tikzjax.com/v1/tikzjax.js"></script>
Then simply put tikz snippets in the Org source like so:
#+begin_tikzjax
\draw (0,0) circle (1in);
#+end_tikzjax
Search the ox-hugo
test site for “tikzjax” examples.
10 Whitespace Trimming #
The default whitespace trimming around exported Org Special Blocks can
be configured by setting the :trim-pre
and :trim-post
properties
for specific special block types in the
org-hugo-special-block-type-properties
customization variable.
- If
:trim-pre
is set tot
, whitespace before the block is removed. - If
:trim-post
is set tot
, whitespace after the block is removed.
For the types not specified in
org-hugo-special-block-type-properties
, the default behavior is like
that of '(:trim-pre nil :trim-post nil)
.
Here’s an example of specifying trimming options for a new special block type “sidenote”:
(with-eval-after-load 'ox-hugo
(add-to-list 'org-hugo-special-block-type-properties '("sidenote" . (:trim-pre t :trim-post t))))
Here’s an example of overriding properties for one of the types, say “mark”:
(with-eval-after-load 'ox-hugo
(setcdr (assoc "mark" org-hugo-special-block-type-properties) '(:trim-pre t :trim-post nil)))
Or, you can M-x customize-group
, select org-select-hugo
and tweak
this variable in that UI.
The default values set this way can be overridden in the Org file by
using the #+header:
keyword above the special blocks. Below examples
demonstrate the usage of this #+header
keyword.
If a special block tag is not recognized as an HTML block or inline
element, or as a Hugo shortcode, it defaults to exporting with <div>
tags. But if either pre or post trimming options are detected for a
special block, it will export with <span>
tags.
By default (in org-hugo-special-block-type-properties
), the “mark”
special block type has :trim-pre
and :trim-post
both set to t
,
because typically the <mark>
is used to highlight words and phrases
mid-sentence and we wouldn’t want to introduce a paragraph break
before or after a <mark>
element.
10.1 Whitespace trimmed before and after the mark
special block (default) #
Below Org block:
line 1
#+begin_mark
abc def
#+end_mark
line 2
exports and renders as:
line 1 abc def line 2
10.2 Whitespace trimmed only before the mark
special block #
Below Org block:
line 1
#+header: :trim-post nil
#+begin_mark
abc def
#+end_mark
line 2
exports and renders as:
line 1 abc def
line 2
10.3 Whitespace trimmed only after the mark
special block #
Below Org block:
line 1
#+header: :trim-pre nil
#+begin_mark
abc def
#+end_mark
line 2
exports and renders as:
line 1
abc def line 2
10.4 No trimming #
Below Org block:
line 1
#+header: :trim-pre nil :trim-post nil
#+begin_mark
abc def
#+end_mark
line 2
exports and renders as:
line 1
abc def
line 2
10.5 Use <span>
tag if trimming detected #
Below Org block:
line 1
#+begin_foo
abc def
#+end_foo
line 2
exports with <div>
tags by default:
|
|
and renders as:
line 1
abc def
line 2
But if any of the trimming options are set in the header, it switches
to using the <span>
tag. So the below Org block:
line 1
#+header: :trim-pre t :trim-post t
#+begin_foo
abc def
#+end_foo
line 2
will export to:
|
|
and render as:
line 1 abc def line 2