Open kght6123 opened 1 year ago
「ページ番号が??になりリンクされない」という問題の箇所のHTMLコードは
<li><a href="manuscript2.html#%E5%90%BE%E8%BC%A9%E3%81%AF%E3%80%81%E7%8C%AB%E3%81%A7%E3%81%82%E3%82%8B22">吾輩は、猫である22(句読点あり)</a></li>
でこのリンクのURLをデコードすると manuscript2.html#吾輩は、猫である22
です。
リンク先のHTMLファイルの「吾輩は、猫である22」のところは次のようになってます:
<section id="吾輩は猫である22" class="level2">
<h2>吾輩は、猫である22</h2>
リンクのURLのフラグメントで参照されてるidは 吾輩は、猫である22
ですが、実際のidは句読点が削除された 吾輩は猫である22
ですので、idが一致しないので当然リンクエラーになります。
まず、これは Vivliostyle.js の問題ではなく、vfm でのMarkdown→HTML変換でのid自動生成の規則に関する問題ですので、issueをvfmに移します。
MarkdownからHTMLへの変換において、見出しからidを自動生成するとき、見出しの文字列をそのままidにするわけではありません。idには通常使えない文字があります。そのため空白は "-" に置き換え、句読点類は削除などされます。また、idは文書内で重複したものは使えないので、同じテキスト内容の見出しが複数あった場合は、自動的に連番をふって重複のないidが生成されます。
ですので、Markdownで文書内の見出しへのリンクを書くときは、生成されたHTMLでidを確認して、そのidをリンク先のURLのフラグメントで指定するのが確実かと思います。あるいは、見出しに明示的にidを指定する方法もあります。(Markdownの見出しのあとに {#hoge}
のように書く)
以上、これはバグではないので、bugのラベルは外します。
ご確認いただきありがとうございます。
ご助言いただいた、Markdownの見出しのあとに {#hoge}
のように明示的に書く方法や、idには通常使えない文字を置き換えたり削除する方法、そもそもこれらの文字を見出して使わない等で回避しようと思います。
Describe the bug 句読点などを含むHeaderに
#
を使って、目次からHeaderへのリンクを作るとページ番号が??
になり、リンクされなくなります。(サンプルコード)https://github.com/kght6123/kght6123-book-template/blob/c40c1f7a615b94c573aec0a8f8aa0b1bdb490457/toc.md?plain=1#L6
https://github.com/kght6123/kght6123-book-template/blob/c40c1f7a615b94c573aec0a8f8aa0b1bdb490457/manuscript2.md?plain=1#L9
To Reproduce 下記のリポジトリをクローンして、
npm install
してnpm run dev
する https://github.com/kght6123/kght6123-book-template/Screenshots
他にもわかっているだけで、下記の様なアットマーク、全角かっこ、半角空白、全角プラスで発生します。 (半角かっこでも起きます、全角半角の区別はないのかもしれません。)
Desktop: