LoginSignup
0
0

表の直下に脚注を付けたい

Posted at

表を書いているときも脚注を与えたいこともあるでしょう。標準 LaTeX で表に脚注を与えるにはちょっと面倒です。

本記事では、tabularray パッケージを利用した表脚注の作成方法やカスタマイズに関して紹介します。

本記事において、表の直下に脚注内容を配置した脚注を「表脚注」と呼称します。これは、ページ最下に脚注内容を配置した脚注(いわゆる “ページ脚注”)とは異なります。

tabularray による表脚注

tabularray パッケージで表脚注を実現するには、talltblr 環境を利用します。(logntblr 環境も表脚注を提供します)

使い方は、\begin{talltblr} に続く [] 内に note(表脚注の内容)を書き込みます。また、表内の表脚注タグには \TblrNote を使います。
タグには \textdagger 等の記号を適当に手動で与える必要があります。

\begin{talltblr}[
    label = none, entry = none,
    note{\textdagger} = {ガラル地方では、ガラル粒子の影響でキョダイマックスすることがある},
    note{\textdaggerdbl} = {アローラ地方では、リージョンフォームと呼ばれる特定の環境に対応したライチュウが存在する},
  ]{
    colspec = {ccccl}, hline{1, 2, Z},
    abovesep = 0pt, belowsep = 0pt,
  }
  名前                                 & 高さ(m) & 重さ(kg) & タイプ & 分類             \\
  ピチュー                             & 0.3     & 2.0      & でんき & こねずみポケモン \\
  ピカチュウ \TblrNote{\textdagger}    & 0.4     & 6.0      & でんき & ねずみポケモン   \\
  ライチュウ \TblrNote{\textdaggerdbl} & 0.8     & 30.0     & でんき & ねずみポケモン   \\
\end{talltblr}

talltblr

簡単ですね。

表脚注タグは手動で指定するため、複数の \TblrNote が同一の note を指定している形を採っていても問題ありません。

\begin{talltblr}[
    label = none, entry = none,
    note{\textdagger} = {かわいい},
  ]{
    colspec = {ccccl}, hline{1, 2, Z},
    abovesep = 0pt, belowsep = 0pt,
  }
  名前                              & 高さ(m) & 重さ(kg) & タイプ & 分類             \\
  ピチュー   \TblrNote{\textdagger} & 0.3     & 2.0      & でんき & こねずみポケモン \\
  ピカチュウ \TblrNote{\textdagger} & 0.4     & 6.0      & でんき & ねずみポケモン   \\
  ライチュウ \TblrNote{\textdagger} & 0.8     & 30.0     & でんき & ねずみポケモン   \\
\end{talltblr}

talltblr


hypreref パッケージを利用すると、note で作成される表脚注にハイパーリンクが作成されます。また、ハイパーリンクを作成する際、リンクのある表脚注タグに枠線を課す場合は以下のようにします。(ドキュメントに明示されていないため実装を参照)

\SetTblrTemplate{note-border}{normal}

キャプションを取り除く

talltblr 環境では、キャプションを付けることを前提としています。そのため、caption キーを利用しなくてもキャプションが挿入されます。また、表のカウンタが +1 されます。

これを避けるには、labelentry に特別な値 none を与えます。

\begin{talltblr}[
    label = none, entry = none
  ]{...}
  % table contents
\end{talltblr}

その都度与えるのが面倒な場合は、\SetTblrOuter を利用します。

\SetTblrOuter[talltblr]{ label = none, entry = none }

あるいは、次のようにすることで tblr 環境に表脚注のみを与えることも出来ます。

\SetTblrOuter[tblr]{ tall, label = none, entry = none }

本記事ではキャプションに関して注目していないので、キャプションをこの機能によって取り除いています。

表の注釈

talltblr 環境には note の他に remark があります。これは、表内と関連付けずに表に関する注釈を与えます。

remark の使い方は note と同じです。ただし表内へのタグはありません。

\begin{talltblr}[
    label = none, entry = none,
    note{\textdagger} = {ガラル地方では、ガラル粒子の影響でキョダイマックスすることがある},
    note{\textdaggerdbl} = {アローラ地方では、リージョンフォームと呼ばれる特定の環境に対応したライチュウが存在する},
    remark{Reference} = {\ttfamily https://zukan.pokemon.co.jp/},
    remark{ポケモン} = {ポケットモンスター、縮めてポケモン。この星の不思議な不思議な生き物。空に、海に、森に、街に、世界中の至る所でその姿を見ることができる。},
  ]{
    colspec = {ccccl}, hline{1, 2, Z},
    abovesep = 0pt, belowsep = 0pt,
  }
  名前                                 & 高さ(m) & 重さ(kg) & タイプ & 分類             \\
  ピチュー                             & 0.3     & 2.0      & でんき & こねずみポケモン \\
  ピカチュウ \TblrNote{\textdagger}    & 0.4     & 6.0      & でんき & ねずみポケモン   \\
  ライチュウ \TblrNote{\textdaggerdbl} & 0.8     & 30.0     & でんき & ねずみポケモン   \\
\end{talltblr}

talltblr

noteremark の順番を入れ替える

デフォルトでは noteremark の順で書き込まれます。これは \begin{talltblr}[...] 内の noteremark の順を問いません。

これを入れ替えるには、以下のように lastfoot を以下のように定義します。

\DefTblrTemplate{lastfoot}{default}{
  \UseTblrTemplate{remark}{default}
  \UseTblrTemplate{note}{default}
}

ところで、note どうし、remark どうしの順番はソース内の書き込み順序に従います。

表脚注・注釈のカスタマイズ

デフォルトの noteremark による表脚注・注釈はあまりに主張が強くて良くないねなので、良い感じに変更しましょう。

tabularray における noteremark\DefTblrTemplate によってカスタマイズできます。

ここでは詳細なカスタマイズ方法の紹介は避けて、\parbox を利用したテキストの改行をタグの右側で揃えるようなスタイル例を紹介します。

\parbox を用いたスタイルの構成例(折りたたみ)
%% 新しいスタイル parboxNote と parboxRemark を定義する
\newlength\noteTblrTagLength
\newlength\noteTblrIndent
\newlength\noteTblrWidth
\newlength\remarkTblrTagLength
\newlength\remarkTblrIndent
\newlength\remarkTblrWidth
\newlength\footTblrRightMargin
\setlength{\footTblrRightMargin}{1em}
\ExplSyntaxOn %% 途中で expl3 のコード (\l__tblr_use_hang_tl) が入るため
\DefTblrTemplate{note-tag}{plain}{ \InsertTblrNoteTag }
\DefTblrTemplate{note-text}{parboxNoteText}{ \parbox[t]{\noteTblrWidth}{\InsertTblrNoteText} }
\DefTblrTemplate{remark-tag}{bold}{ \sffamily \gtfamily \itshape \UseTblrFont{remark-tag} \InsertTblrRemarkTag }
\DefTblrTemplate{remark-sep}{fwColon}{}
\DefTblrTemplate{remark-text}{parboxRemarkText}{ \parbox[t]{\remarkTblrWidth}{\InsertTblrRemarkText} }
\DefTblrTemplate{note}{parboxNote}
  {
    \UseTblrAlign{note}
    \UseTblrIndent{note}
    \MapTblrNotes
    {
      \setlength{\noteTblrIndent}{\l__tblr_use_indent_tl}
      \settowidth{\noteTblrTagLength}{
        \UseTblrTemplate{note-tag}{plain}
        \UseTblrTemplate{note-sep}{normal}
      }
      \setlength{\noteTblrWidth}{\dimexpr \linewidth-(\noteTblrIndent+\noteTblrTagLength+\footTblrRightMargin)}
      \UseTblrTemplate{note-tag}{plain}
      \UseTblrTemplate{note-target}{default}
      \UseTblrTemplate{note-sep}{normal}
      \UseTblrTemplate{note-text}{parboxNoteText}
      \par
    }
    \vspace{0.3em}
  }
\DefTblrTemplate{remark}{parboxRemark}
  {
    \UseTblrAlign{remark}
    \UseTblrIndent{remark}
    \MapTblrRemarks
    {
      \setlength{\remarkTblrIndent}{\l__tblr_use_indent_tl}
      \settowidth{\remarkTblrTagLength}{
        \UseTblrTemplate{remark-tag}{bold}
        \UseTblrTemplate{remark-sep}{fwColon}
      }
      \setlength{\remarkTblrWidth}{\dimexpr \linewidth-(\remarkTblrIndent+\remarkTblrTagLength+\footTblrRightMargin)}
      \UseTblrTemplate{remark-tag}{bold}
      \UseTblrTemplate{remark-sep}{fwColon}
      \UseTblrTemplate{remark-text}{parboxRemarkText}
      \par
    }
    \vspace{0.3em}
  }
\ExplSyntaxOff

日本語の斜体化は この記事 を参照しながら、プリアンブルに以下を追加しています。

\usepackage{luatexja-fontspec}
\setsansjfont{Harano Aji Gothic}[AutoFakeSlant=0.25]

以下のように適用すると、次のような表を得られます。

%% parboxNote と parboxRemark を適用する
\SetTblrTemplate{note}{parboxNote}
\SetTblrTemplate{remark}{parboxRemark}
%% \SetTblrStyle で note と remark の構成を変更する
\SetTblrStyle{note, remark}{
    indent = 1em,
    font = \footnotesize,
    %% hang は使えません
  }

talltblr

少しややこしいですが、note のスタイル変更は表脚注のみに機能します。そのため、表内の脚注タグには影響しません。(\TblrNote 側のタグのスタイルを変更する手段が提供されていない)
もしも \TblrNote 側のタグのスタイルを変更したい場合は、\TblrNote を再定義するなどの方策を採る必要があるでしょう。

同じような形式で contfootcontheadcaptionfirstheadmiddleheadlastheadheadfirstfootmiddlefootlastfootfoot のスタイルを変更できます。

このようなカスタマイズの詳細な構成方法はドキュメントを参照してほしいですが、ドキュメントの § 4 を読むだけでは不十分です。§ 8.25~29 にあるソースコードも参照してください。(v.2023A)

余談

表の脚注も注釈も tabularray で出来ちゃう。


表脚注のタグには “†” などの記号が用いられますが、手動でタグを決める必要があるので、以下のような記号類のコマンドを覚えておくと良いでしょう。(\fnsymbol による記号は次のような順序で表示されます)

  1. \textasteriskcentered (∗)
  2. \textdagger (†)
  3. \textdaggerdbl (‡)
  4. \textsection (§)
  5. \textparagraph (¶)
  6. \textbardbl (‖)
  7. \textasteriskcentered\textasteriskcentered (∗∗)
  8. \textdagger\textdagger (††)
  9. \textdaggerdbl\textdaggerdbl (‡‡)

ちなみに、そもそも tblr 環境内で \footnote が使えないの?と思った人もいるかもしれませんが、これはうまくいきません。なぜなら tabularray パッケージから提供される表環境は複数回に渡って表コンテンツを読むからです。これゆえにカウンタが上手く機能しません。

ページ脚注に関してはリポジトリで Issue が挙がっていますが、いまだ実現には至っていません。

標準 LaTeX における表と脚注

LaTeX は標準で表(tabular 環境)と脚注 (\footnote) を記述することが出来ますが、これを組み合わせることは難しいです。
これは、tabular 環境内で \footnote を利用すると、問題なくタイプセットされるのに対して、ページ最下にあるはずの脚注が表示されません。

これを解決するには以下の方法が一般的です。

  • \footnotemark\footnotetext による手動指定
  • \footnotetablefootnote パッケージ

あるいは、tabularx パッケージから提供される tabularx 環境内では、\footnote を使って普通に脚注を利用することが出来ます。


一方で、表脚注にする場合は tabular 環境全体を minipage 環境で囲います。これは簡単に実現することが出来ます。(表と脚注の間の罫線は \footnoterule です)

\begin{minipage}{0.85\linewidth}
  \begin{tabular}{ccccl}
    \hline
    名前        & 高さ(m) & 重さ(kg) & タイプ & 分類             \\
    \hline
    ピチュー    & 0.3     & 2.0      & でんき & こねずみポケモン \\
    ピカチュウ \footnote{ガラル地方では、ガラル粒子の影響でキョダイマックスすることがある}
                & 0.4     & 6.0      & でんき & ねずみポケモン   \\
    ライチュウ \footnote{アローラ地方では、リージョンフォームと呼ばれる特定の環境に対応したライチュウが存在する}
                & 0.8     & 30.0     & でんき & ねずみポケモン   \\
    \hline
  \end{tabular}
\end{minipage}

minipage+tabular

ただし、この方法では、同一内容の脚注に対して期待した結果を得ることが出来ません。そのため、\footnotemark\footnotetext を利用してうまく手動で調整する必要があるでしょう。

minipage + tabular

この他に、threeparttable パッケージを利用することでも表脚注を作成できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0