htmlやmarkdownで日本語長文を書く時に改行すると半角スペースが残る問題
2024年4月現在、htmlや1行改行を改行せず表示する想定のmarkdownプレビューで、日本語としては意図しない半角スペースが入る問題。一部の日本人はすごく気持ち悪がっている。
仕様と実際の挙動の検証
実はCSS Text Module Level 4のSegment Break Transformation Rulesというところで、ソース中の改行を半角スペースにするかただ除去するかのルールが提起されている。簡単に言うとCJKのような分かち書きをしない文字を使っているときは「ただ除去する」になる、というもの。
ただし、現時点で手元のブラウザでは実際に半角スペースになっているケースを見るわけなので、実装が追い付いてない模様 (↑もdraftなので仕方がない)。なので実際の挙動を調べる。GitHubのリポジトリ内で.mdファイルを作り、それをプレビューする際の半角スペースの入り方を確認。
- Chrome … ver.123では意図しないスペースが入る。VivaldiなどChromium系も同様と思われる。
- Firefox … ver.124でスペースが入らない! ver.52 で対応したという情報をにわかに信じられなかったが、試したら本当になかった。
見解 (現時点でどうするか)
Wikipediaでは1行改行の使用はできるだけ避けるべきとしている。
そもそもプレビューで改行をさせる意図がないのにhtmlソースやmarkdown中で1行改行を入れる目的として、一番大きいのはgit diffの見やすさだと思われる。例えばGitHub上のdiffビューワーで改行しない長文のdiffを表示させると、行全体に色が付くものの文字単位で違う所はさらに色が付くので、全く使い物にならないわけではない。
後述の「1行改行を改行するか」という設定違いを記事投稿サービスに依らず自分でコントロールしたいという点も含めて考えると、今時点ではソースで改行すること自体を止めるのがよさそう?
似た案件
上記とは直接関係ないが、似ている事象・仕様について区別のために調査したので記録する。
1. markdown中の1行改行を改行するかしないか
これはどちらが正解というのはたぶん無くて、markdownパーサーの設定違いと考える。
- Zennは改行する。
- GitHubはリポジトリ内の.mdファイルのプレビューでは改行しないが、IssueやPull Requestに書くコメントは改行する。この仕様が明記された公式ドキュメントを探したが見つからなかった。
- markdown-itはデフォルトでは改行する。改行しないようにしたい場合、意図しない半角スペース問題も同時に回避できるmarkdown-it-cjk-breaksを使うのがよさそう。
2. 日本語と英語の間に間隔をあけるか
Word等で日本語文の途中でEnglish wordを入れると日英の間にちょうど良いスペースが入るのと同様の効果がブラウザでもできるとかできないとか、という話がある。
2024年4月現在、この話の拠り所は次の2点:
-
W3C Working DraftであるCSS Text Module Level 4のtext-autospaceで文中で文字種が変わる境界のスペーシングを制御するという仕様が提案されている。「文字種」の詳しい定義は難しくて良く分かっていない。
- text-autospaceという名前のプロパティはInternet Explorerが独自実装で5.5時代から導入していたものらしく、そちらを想定して紹介された記事がいくつかある (HTMLクイックリファレンスやとほほのWWW入門など)
- Chrome 120以降でこのtext-autospaceが実装されている。ただし「試験運用版のウェブ プラットフォーム機能」を有効にしないといけない。詳しくはChrome dor Developersのこちらの記事を参照。
3. 鍵括弧などの約物が連続するときの余分な空きを詰める
text-spacing-trimというcssで制御され、Chrome 123で実際に動作変更が入ったとのこと。ただし、この記事で問題にしている半角スペースが意図せず入ったものはたぶん詰まらない。markdownソース中で入れているプレビュー時の改行を意図しない改行は大抵は句点 (。) の前にあるはずだが、句点+半角スペースの連続はtext-spacing-trimの対象ではない模様。
Discussion