Markdownの「**」が太字にならずに残る原因|かっこと句読点
Markdownで「**」で囲んだのに太字にならないのは、「**」のすぐ内側がかっこや句読点で、外側が普通の文字だからです。CommonMarkの決まりを実例の表で読み解き、太字にする書き直し方と、効かない直し方を整理します。
公開読了目安 約5分
この記事の要点
- 「**」のすぐ内側がかっこや句読点だと、外側に空白か記号が要る
- 「これは**「重要」**です」は外側が文字なので太字にならない
- 「**」をかっこの内側へ入れると、文の見た目を変えずに直る
- ゼロ幅スペースは空白として数えないので、挟んでも直らない
- 円記号などの記号を約物に数えるかは、仕様の版で違う
目次
Markdown で「**」で囲んだのに、太字にならず記号が残る。日本語の文でよく起きるこの現象は、「**」のすぐ内側がかっこや句読点で、外側が普通の文字のときに起きます。
たとえば「これは**「重要」**です」は太字になりません。「これは「**重要**」です」と、「**」をかっこの内側へ入れれば太字になります。
この記事では、Markdown の決まりを定めた CommonMark という仕様の文言を、日本語の実例で読み解きます。
太字になる並び・ならない並び
まず実例です。Markdown を表示する部品の 1 つ、marked(バージョン 18.0.3)に通した結果を並べます。marked は CommonMark の決まりに沿って作られています。
| 書いた文 | 太字になるか | 理由 |
|---|---|---|
**重要**です | なる | 「**」の内側が文字 |
これは**「重要」**です | ならない | 内側がかっこで、外側が「は」「で」 |
これは「**重要**」です | なる | 内側が文字、外側がかっこ |
これは **「重要」** です | なる | 外側が空白 |
ここが**重要。**です | ならない | 閉じる側の内側が句点で、外側が「で」 |
ここが**重要**。です | なる | 句点を外に出した |
**注意:**入力してください | ならない | 閉じる側の内側がコロンで、外側が「入」 |
**注意**:入力してください | なる | コロンを外に出した |
彼は**Python**を使う | なる | 内側が英字(記号ではない) |
値は**100円**(税込)です | なる | 内側が「1」と「円」 |
「ならない」行に共通するのは、**「**」の内側が記号で、外側が普通の文字**という並びです。英字や数字は記号ではないので、日本語の文字に挟まれていても太字になります。
CommonMark の決まりを読む
CommonMark 0.31.2 は、「**」が太字を始められるかを、すぐ前とすぐ後ろの 1 文字で決めます。
始める側の「**」の条件は次の 2 つです。
- すぐ後ろが空白ではない
- すぐ後ろが記号なら、すぐ前は空白か記号である
終わる側の「**」は、前と後ろを入れ替えた同じ条件です。すぐ前が記号なら、すぐ後ろは空白か記号でなければなりません。
「これは**「重要」**です」に当てはめる
始める側の「**」は、すぐ後ろが「「」です。かっこは記号なので、すぐ前が空白か記号である必要があります。
ところが、すぐ前は「は」です。条件を満たさないので、この「**」は太字を始められません。
終わる側も同じです。すぐ前の「」」が記号なのに、すぐ後ろは「で」です。こうして、どちらの「**」も文字のまま残ります。
日本語で起きやすい理由
英語では、単語と単語のあいだに空白があります。「**」の外側は空白になることが多く、2 つ目の条件に引っかかりません。
日本語は文字を空白なしで続けます。そのため、かっこや句読点ごと強調すると、外側がすぐ普通の文字になります。
強調したい語句をかっこごと囲む書き方は、手で書いた文でも、AI チャットの回答をコピーした文でも起こりえます。
太字にする書き直し方
文の見た目を変えずに直すなら、次の順で試します。どれも marked 18.0.3 で太字になることを確かめました。
| 直し方 | 書き方の例 | 見た目への影響 |
|---|---|---|
| 「**」をかっこの内側へ | これは「**重要**」です | かっこが太字にならないだけ |
| 句点・コロンを外へ | ここが**重要**。です | 句点が太字にならないだけ |
| 前後に半角空白 | これは **「重要」** です | 文中に空白が入る |
| HTML の強調タグ | これは<strong>「重要」</strong>です | 表示側が HTML を許すときだけ |
いちばん手軽なのは、1 つ目の「**」をかっこの内側へ入れる直し方です。かっこは太字になりませんが、読み手が受け取る強調はほぼ同じです。
HTML のタグは、ブログや README のように HTML を書ける場所でだけ使えます。チャットやメモアプリでは、タグがそのまま文字として出ることがあります。
効かない直し方
見えない空白として知られるゼロ幅スペース(U+200B)を「**」の外側に挟んでも、太字にはなりません。
CommonMark が空白として数えるのは、Unicode の空白の分類(Zs)に入る文字と、タブ・改行などだけです。ゼロ幅スペースは書式を整える文字の分類(Cf)なので、空白に入りません。
marked でも、挟んだ文は太字になりませんでした。
円記号は「記号」か
どの文字を記号(約物)に数えるかは、仕様の版で違います。
| 仕様 | 記号に数える文字 |
|---|---|
| CommonMark 0.31.2(2024 年) | Unicode の約物(P)と記号(S) |
| GitHub Flavored Markdown 0.29(2019 年) | ASCII の約物と、Unicode の約物(P) |
円記号「¥」や全角の「¥」は、Unicode では記号(S)です。新しい版では記号に数えるので、金額は**¥1,000**です は太字になりません。marked 18.0.3 でもそうなりました。
古い版の決まりでは「¥」を記号に数えないので、同じ文が太字になります。表示するアプリがどの版に沿って作られているかで、結果が分かれることがあります。
かっこや句読点は、どちらの版でも約物(P)です。最初の表で「ならない」とした並びは、どちらの版でも太字になりません。
記号を表示に使わないなら外してしまう
太字を表示させたいのではなく、メールや LINE に文を貼りたいだけなら、記号ごと外すほうが早いこともあります。
Markdown記号除去は、太字にならずに残った「**」も対を探して外し、外した数を知らせます。掛け算の「*」やハッシュタグの「#」は残します。
関連記事
あわせて読みたい
同じテーマ・関連ツールの記事です。