94591


VS
Codeを使用してMarkdownで日本語文章を作成していて、途中で半角英数字を入力し、それをアスタリスク２個で囲んで太字にしようとしましたが、うまくいくときといかない場合があります。  
うまくいかない場合：

[code]

    1. **p(p1 + p2)**は、常に**p(p1) + p(p2)**以下でなければなりません  
    2. **p(a * p1)**は、常に**a** * **p(p1)**の絶対値に等しくなければなりません   
    
[/code]

これだと、１は`は、常に`に太字がかかります。  
２は`p(a * p1)は、常に`が太字になり、`**a** * **p(p1)**`というように表示されます

うまくいく場合：

[code]

    1. **p(p1 + p2)**は、常に **p(p1) + p(p2)** 以下でなければなりません  
    2. **p(a * p1)**は、常に **a** * **p(p1)** の絶対値に等しくなければなりません 
    
[/code]

つまり、うまくいく場合は２つ目の太字表記のアスタリスクの最初と最後に半角スペースを入れる場合です。  
英語のように半角スペースの有無で判断しているのかと思いましたが、日本語文（全角文字）だと半角スペースを入れなくても問題ありません。

このようなルールは記法に明記されているのでしょうか。調べましたがわかりませんでした。それともシステム的な問題なのでしょうか。

よろしくお願いいたします。


CC BY-SA 4.0
2023-04-21T02:28:29.357
94589
2023-04-25T05:45:47.840
2023-04-25T05:45:47.840
3060
58016
question
markdown
Markdown で日本語文章内での半角文字が太字にならない場合がある


VS Codeの標準の Markdownは [markdown-it](https://github.com/markdown-it/markdown-
it) が利用されていたはずです  
参考: [Markdown Extension](https://code.visualstudio.com/api/extension-
guides/markdown-extension)

ソースコードを調べたわけではないけれど, 以下のようなパターンでパースを失敗してそうです

  1. `**` で括る, もしくは 括るタイプの別の記述で (但し inline codeは除く)
  2. マークの直後に(スペースなど挟まずに) (日本語でなくとも)文字が続く場合
  3. 内容の最後が記号(`!`, `"`, `#`, `$`, `%`, `&`, `'`, `(`, `)`, `,`, `.` などその他) だと失敗

* * *

対処療法になるけれど, ゼロ幅スペースなどを利用し防ぐことは可能そうです

失敗例:  
`**This is bold text.**after-text`

**This is bold text.**after-text

成功例:  
`**This is bold text.**&#x200B;after-text`

**This is bold text.**​after-text

(※ 編集中の stackoverflow Markdopwnでは正しく表示されたけど, 編集後は失敗してるようです)  
(VS Codeでの Markdownは正しく表示されている)


CC BY-SA 4.0
2023-04-21T05:29:42.603
94591
2023-04-21T05:29:42.603
43025
94589
answer


まず Markdown の初出である <https://daringfireball.net/projects/markdown/>
では、今回のようにパースが難しい例をどう扱うべきかについて詳しくは書いていません。

このため様々な難しい例をどのように扱うべきかについて処理系によって結果が違う状況が生まれました。

そのような状況を何とかするため、CommonMark という仕様が作られています: <https://commonmark.org/>

今回質問者さんはひとまず VS Code の Markdown プレビュー機能で試されたようです。この機能は [markdown-
it](https://github.com/markdown-it/markdown-it) というライブラリによって実現されており、この処理系は
CommonMark 準拠の動作をするように作られています。

<https://code.visualstudio.com/docs/languages/markdown#_does-vs-code-support-
github-flavored-markdown>

> VS Code targets the CommonMark Markdown specification using the markdown-it
> library.

という訳で、今回このような挙動になったのは CommonMark でそのように定められているためです:
<https://spec.commonmark.org/0.30/#emphasis-and-strong-emphasis>

回避するための方法はいくつか考えられますが、コードの部分は適切にインラインコードとして装飾するとか、半角スペースを挿入するとかいったあたりが実行しやすいでしょう。

ところで質問者さんのコメントによると今回の Markdown は質問者さんの社内製品で利用されるようです。であればその製品と VS Code
のプレビューとでレンダリング結果が同じであるとは限らないので、そのあたりも確認されると良さそうです。


CC BY-SA 4.0
2023-04-21T12:13:56.393
94598
2023-04-21T12:13:56.393
19110
94589
answer