私は先程、discobotとのチュートリアルをしたのですが、斜体テキストの入力方法の説明が間違っているのではと思いました。
説明では斜体にしたい文字をアンダーバーで囲むとなっていますが、正しくはアスタリスクで囲むですよね?
間違ってはいないと思います。
たとえばこれは アンダースコアで囲んだ文字列です。
これはMarkdownの駄目な部分ですね。 Pelicandyさんのスクリーンショットにも表われているとおり、例えば_斜体_のようなマークアップは強調として解釈されません。
アンダースコアを使ってマークアップする場合は、空白や特定の種類の記号で区切る必要が有ります。(これは、例えば foo_bar_baz のような変数名の類いをそのまま表示するためと思われますが、本当に悪い仕様です)。ですから、
説明が間違っている
というのは正しいと思いますが、英語では空白が有った筈なので、翻訳の問題です。
正しくはアスタリスクで囲むですよね?
この問題には下記3種類の対処が有ります。
- HTMLタグ(
<i>〜</i>
や<b>〜</b>
など)を使う:
実は、完全な対処法はこれだけです。 - 空白などで区切る:
harukamy さんの返信のように、日本語であっても空白で区切ることを可とするなら、これが一番簡単な対処です。 - アスタリスクを使う:
アスタリスクを使うのも簡単で良いのですが、これにはまだ落とし穴が有り、例えば、*斜体!*といった風に特定の種類の記号が特定の位置に有るとマークアップに失敗します(本当に悪い仕様なのです)。
まぁ、本気で修正を望んでいるならupstream行きではあるんですが、それはそれとして
記載されている記事にも記述があるのですが、構文というより実装の問題ですね。
で、なんでそもそもそんな問題が起きるのか、というと、2割は宗教の問題、8割は国際化の問題(要は日本語を知らない)です。
なぜスペースがいるのか
Markdown処理系を実装するにあたって構文解析が必要になるわけですが、ここで一部の記法は「ワードを修飾する」表現であるとされます。
もちろん、より簡易にするためにすべての記法においてワード修飾を要求することもできますが、なぜワード修飾にしたりしなかったりするのか。
それは、全部の記号をエスケープさせるのは体験がよくないので、なるべく意図を汲み取って解釈すべきところだけ解釈したいからです。
なぜワード修飾だったりそうじゃなかったりするのか
じゃあなんで _
はワード修飾なのに *
はワード修飾でないのか。
これは英語の書き方の問題です。
*
は強調を表すものとして、 *un*comfortable
のようにplainであっても一部分を修飾することがあるのに対して、 _
はワード構成であるとみなすのが一般的なのでそういう使い方をしないためです。
これは日本語が文字間にワード境界を持っていたりいなかったりすることと、そもそもの英語との単語構成の違いに由来する問題ですが、もっと宗教的なことによって発生しているものもあります。
それは、ワード修飾になっている記法にスペースを含めるかどうかです。
スペース区切りで境界を検出している場合は途中に記号を挟んでも大丈夫だったりするのですが、間にスペースをはさんでも大丈夫かどうかは記号の効力をかなり強く設定する必要があるため考え方がより分かれます。
実例
原則として前後にスペースを要求するソフトウェアとしては、Atlassian製品があります。
Atlassian製品は全体的に日本語フレンドリーじゃないので、まぁそうだろうなという感じです。
そして確かSlackもスペースを要求しがちだった気がします。
Discord, Mattermost, Telegramは基本的にスペースを要求しません。
Skype v4も要求しなかった気がします。
ただ _
記法は英語圏では語中のものを解釈して欲しくないという要求が強いため、 _
を挟んで使えることは基本的に期待しないほうが良いでしょう。
discobotについて
もしかしたら元々の意図は「iを押したら * *
を入れてくるのに、説明ではなぜ _
を使うんだ」ということだったかもしれません。
これについては全くその通りです。
多分、discobotのチュートリアルをやって、なおかつiボタンを押す人が少ないのでしょう……
なんだか思っていたよりも複雑な問題なのですね。
私がdiscobotとチュートリアルをしたときに思ったのは次の通りです。
太字は説明の通りにやったらちゃんと太字になるのに、_斜体_はならないじゃん。
入力フィールドの上にアイコンが並んでいて、斜体を入力するときに使うのであろう斜めになったIもあるな。それを使ってみよう。
あれ?アンダースコアではなくアスタリスクが入力された。試してみるか。あれ。こっちはちゃんと斜体になる。
discobotの説明が間違っているのでは?報告しとくか。
という感じでした。
スペースが必要であるということにはまったく気づいていませんでした。
なるほど。それは不幸な事故が2つ重なった感じですね……
upstreamに「Iでアスタ入れるんだからチュートリアルをアスタにしろよぉ」と言うのはアリな気もしますが、アスタとアンダースコアの挙動に関してはまぁ前述のように問題が難しく……