Skip to content

Instantly share code, notes, and snippets.

@MurakamiShinyu
Last active March 15, 2026 01:51
Show Gist options
  • Select an option

  • Save MurakamiShinyu/3d1fa4be78a249823a7ba60d3973dee2 to your computer and use it in GitHub Desktop.

Select an option

Save MurakamiShinyu/3d1fa4be78a249823a7ba60d3973dee2 to your computer and use it in GitHub Desktop.
DPUB脚注についての検討メモ

DPUB脚注についての検討メモ

関連VFM PR:

関連Vivliostyle.js Issue/PR:

検討課題:

  • <aside role="doc-footnote"> の出力位置
  • <a role="doc-noteref"> のマークアップと脚注参照番号の形式
  • <aside role="doc-footnote"> のマークアップと脚注番号の形式

原則とする方針:

  • EPUBとの互換性
    • role属性をepub:type属性に変えればEPUB脚注にも対応できて、EPUBリーダーでの脚注対応(ポップアップ表示など)を活かせること
  • HTML文書として再利用性が高いこと
    • 普通にWebページとしてブラウザで表示したときに、読みやすいこと
    • 目的に応じてCSSでスタイルを変えやすいこと

<aside role="doc-footnote"> の出力位置

Vivliostyle.jsでのDPUB脚注サポートでは、組版結果での脚注は基本的に脚注参照 <a role="doc-noteref"> と同じページに配置され、HTML文書上での脚注本体 <aside role="doc-footnote"> がどこにあっても組版結果には影響しない。そのため、HTML文書上での脚注本体をどこに出力するかは、HTML文書としての利便性や再利用性を考慮して決めればよい。

次の3つの選択肢が考えられる。

  1. 元のMarkdown文書での脚注定義の位置
  2. 脚注参照のある段落の直後
  3. ドキュメントの最後

「1. 元のMarkdown文書での脚注定義の位置」が、Markdown原稿作者の意図をそのまま反映できてよいのではないか。

<a role="doc-noteref"> のマークアップと脚注参照番号の形式

Vivliostyle.jsでのDPUB脚注サポートでは、デフォルトのスタイルシートで、脚注参照 <a role="doc-noteref"> をフォントサイズを小さめにした上付き文字で表示するようにしているため、<sup> 要素を入れる必要はない。しかし、通常のHTML文書としての再利用性を考慮すると、<sup> 要素を入れないと本文テキストと脚注参照番号が区別しにくい問題がある。Vivliostyle.jsのデフォルトのスタイルシートでは <a role="doc-noteref"><sup> 要素が組み合わせて使われている場合には、上付きのスタイルが二重には適用されないようにしているため、<sup> 要素を入れても脚注参照としての表示には影響しない。

考えられる選択肢:

  1. sup要素あり <a id="fnref1" href="#fn1" role="doc-noteref"><sup>1</sup></a>
  2. 番号のみ <a id="fnref1" href="#fn1" role="doc-noteref">1</a>
  3. 番号を角括弧囲み <a id="fnref1" href="#fn1" role="doc-noteref">[1]</a>

「1. sup要素あり」が、HTML文書としての再利用性が高いのではないか。上付き以外のスタイルにしたいならばCSSで変更すればよい。

<aside role="doc-footnote"> のマークアップと脚注番号の形式

考えられる選択肢:

  1. ol要素使用
    <aside id="fn1" role="doc-footnote">
      <ol start="1">
        <li>Footnote</li>
      </ol>
    </aside>
  2. 番号をsup要素囲み
    <aside id="fn1" role="doc-footnote">
      <a href="#fnref1" role="doc-backlink"><sup>1</sup></a> Footnote
    </aside>
  3. 番号のみ
    <aside id="fn1" role="doc-footnote">
      <a href="#fnref1" role="doc-backlink">1</a> Footnote
    </aside>
  4. 番号とピリオド
    <aside id="fn1" role="doc-footnote">
      <a href="#fnref1" role="doc-backlink">1.</a> Footnote
    </aside>
  5. 番号を角括弧囲み
    <aside id="fn1" role="doc-footnote">
      <a href="#fnref1" role="doc-backlink">[1]</a> Footnote
    </aside>

「1. ol要素使用」なら、list-styleや::marker疑似要素を使って、番号のスタイルをCSSで柔軟に変更できるメリットがある。脚注番号は counter(list-item) で扱える。そのためにol要素のstart属性を使って、脚注番号の開始番号を指定する必要がある。この方法では脚注番号をbacklinkにすることはできない。

「2. 番号をsup要素囲み」なら、脚注番号をbacklinkにすることができるメリットがある。上付き以外のスタイルにしたいならばCSSで変更すればよい。しかし、list-style-position: outside に相当するスタイルを適用することができない。

@u1f992
Copy link

u1f992 commented Mar 12, 2026

<aside role="doc-footnote">の出力位置」「<a role="doc-noteref">のマークアップと脚注参照番号の形式」についてとくに異論ありません。一点補足で、インライン脚注^[...]は、元のMarkdown文書での独立した脚注定義位置がありません。通常aside要素はインライン脚注を入れた位置に直接挿入することはできないため、この場合は現在の実装のように、可能な位置まで外に出す必要があると思います。

@u1f992
Copy link

u1f992 commented Mar 12, 2026

<aside role="doc-footnote">のマークアップと脚注番号の形式」について、1.ol要素使用は妙案でJavaScriptに頼らないカスタマイズ性も高い反面、1要素のol-liは順序付きリストとは言えずセマンティクス的に逸脱しており(全脚注をまとめてol-li-asideが本来意味的に自然か)、単一のラベル表示を指定する手段としてstartを使用するのも裏技的に感じています。バックリンクについては現在のPandoc方式のように別途リンクを置く対応になると思います<a href="#fnref1" class="footnote-back" role="doc-backlink">↩</a>

2以降の案なら、どの案でもカスタマイズにはJavaScriptを使うほかないので大差はなく、素のHTMLとして表示した時に成立するのは2,4かと思います。特に4は https://www.w3.org/TR/dpub-aria-1.1/#doc-backlink にもみほんがありますね

<aside id="fn01" role="doc-footnote">
   <a role="doc-backlink" href="#fnref01">1.</a>
   Additional results of this study and
   similar studies can be found at …
</aside>

@MurakamiShinyu
Copy link
Author

一点補足で、インライン脚注^[...]は、元のMarkdown文書での独立した脚注定義位置がありません。通常aside要素はインライン脚注を入れた位置に直接挿入することはできないため、この場合は現在の実装のように、可能な位置まで外に出す必要があると思います。

はい、この検討メモを書いたとき「インライン脚注^[...]」のことを忘れてました。

@MurakamiShinyu
Copy link
Author

2以降の案なら、どの案でもカスタマイズにはJavaScriptを使うほかないので大差はなく、素のHTMLとして表示した時に成立するのは2,4かと思います。特に4は https://www.w3.org/TR/dpub-aria-1.1/#doc-backlink にもみほんがありますね

「4. 番号とピリオド」の場合、次の問題があります:

  • それが注なのか本文内の番号付きリストなのかが分かりにくい
  • 注番号を 1. 以外のスタイル(たとえば [1])にしたいとき、すでにピリオドがあるのでできない。

「2. 番号をsup要素囲み」ならば次の利点があります:

  • 注参照の <sup>1</sup> と同じ形式なので、それが注だと分かりやすい。
  • CSSでsupのvertical-alignをキャンセルして::before/::after擬似要素で括弧囲み形式に変えたりできる。

「2. 番号をsup要素囲み」のコードで、番号と脚注テキストとの間にスペース文字を入れない方がよいかもしれません。それなら番号だけ外に出すなどCSSでスタイル指定がよりやりやすくなります。

<aside id="fn1" role="doc-footnote">
  <a href="#fnref1" role="doc-backlink"><sup>1</sup></a>Footnote
</aside>

@u1f992
Copy link

u1f992 commented Mar 12, 2026

sup+スペースなしなら確かに、不完全なスタイルで確認する際も視覚的な区別は問題ありませんし、CSSによるカスタマイズも十分対応できてよさそうです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment