強調の前後にスペースが無い場合、解釈が異なる
Markdownは英語のように単語を分かち書きする言語を前提としている部分があります。
改行の扱い(スペースになる)がその典型ですが、強調マークアップに関しても分かち書きが前提になっていることがあるようなので、状況を確認しました。
問題になるのは、日本語のような分かち書きしない言語での、
それが*重要*です
のようなマークアップです。
「*重要*
」の前後にスペースがありませんが、強調と解釈されることを期待しています。
Markdownを受け付けるツールやサイトは多いですが、こういったケースの扱いは大きく分けると以下3通りのようです。
- 期待通り:
<p>それが<em>重要</em>です</p>
となる - 概ね期待通り:
ただし、それが*重要!!*です
のように強調される文字列の端が単語を分割する記号だった場合には、強調マークアップと判断されず、<p>それが*重要!!*です</p>
となってしまう - 期待と異なる:
強調マークアップと判断されず、<p>それが*重要*です</p>
となってしまう
表
上のようなケースで強調マークアップに使われる記号 *
と _
、それらの連続である **
、__
、***
、___
に関して、どのように解釈されるかまとめたのが下の表です。
* |
_ |
** |
__ |
*** |
___ |
|
---|---|---|---|---|---|---|
Markdown | ok | ok | ok | ok | ok | ok |
Cmark | (ok) | NG | (ok) | NG | NG | NG |
Commonmark.js | (ok) | NG | (ok) | NG | NG | NG |
Marked | ok | ok | ok | ok | ok | ok |
Markdown-it | (ok) | NG | (ok) | NG | NG | NG |
Blackfriday | NG | NG | ok | ok | ok | ok |
Pandoc | ok | NG | ok | NG | ok | NG |
Stack Overflow | (ok) | NG | (ok) | NG | NG | NG |
Qiita | ok | ok | ok | ok | ok | ok |
Hatena Blog | ok | ok | ok | ok | ok | ok |
ok: 期待通り
(ok): 概ね期待通り
NG: 期待と異なる
ちょっと厄介な印象ですが、本家MarkdownやMarkedは全ての表記がOKで、日本語で使いやすそうです。
QiitaやHatena Blogはさすがに日本語ユーザー向けにしっかり対応してますね。
どこで使っても出来るだけ崩れないマークアップを目指す場合、
-
_
より*
を使った方が期待通り強調として解釈されやすい - 最も期待通りに解釈されやすいのは
**重要**
のように**
を使う強調
あたりを考慮するといいかも知れません。
もちろん、日本語でも前後にスペースを入れてしまう、という手もあります。
使用したMarkdownパーサー
オプションの指定は行わず、デフォルトで試しています。
- Markdown 1.0.1
- Cmark 0.28.3
- Commonmark.js 0.28.1
- Marked 0.3.7
- Markdown-it 8.4.0
- Blackfriday 2.0
- Pandoc 2.0.3
(Stack Overflow、Qiita、Hatena Blogに関しては、投稿フォームのプレビューで本日2017年12月2日に試しました)
この記事のライセンス
この記事はCC BY 4.0(クリエイティブ・コモンズ 表示 4.0 国際 ライセンス)の元で公開します。