The org html export uses <b> tags for *bold* text, and <i> tags for /italic/ text, but doesn't use <u> tags for _underlined_ text. Instead it inserts a <span class="underlined">. Why is that the case?

I'm aware that by the current HTML standard, the <u> tag should be used for "unarticulated annotation", not for underlining. But the same is true for <b> (the bring attention tag) and <i> (the idiomatic text tag). Funnily, <b> and <i> have good alternatives as <strong> and <em>, but those aren't use either...

  • 1
    Such a "why" question is likely better directed at the Org maintainers directly. Others, here, may only be guessing.
    – Drew
    Apr 12, 2023 at 17:49
  • Probably historical reasons: what the implementer knew at the time of writing the code, what the standard was at that time, etc.
    – NickD
    Apr 12, 2023 at 19:15

1 Answer 1


My guess is that it is historical (as I said in my comment), but you can change it if you'd rather do it differently. All of that is controlled by the variable org-html-text-markup-alist which by default is defined as follows:

(defcustom org-html-text-markup-alist
  '((bold . "<b>%s</b>")
    (code . "<code>%s</code>")
    (italic . "<i>%s</i>")
    (strike-through . "<del>%s</del>")
    (underline . "<span class=\"underline\">%s</span>")
    (verbatim . "<code>%s</code>"))
  "Alist of HTML expressions to convert text markup.

It is a defcustom so you can use the customize interface to change elements of the alist.

As usual, you should read the doc string of the variable with C-h v org-html-text-markup-alist.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.