表を書いているときも脚注を与えたいこともあるでしょう。標準 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}
簡単ですね。
表脚注タグは手動で指定するため、複数の \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}
hypreref パッケージを利用すると、note
で作成される表脚注にハイパーリンクが作成されます。また、ハイパーリンクを作成する際、リンクのある表脚注タグに枠線を課す場合は以下のようにします。(ドキュメントに明示されていないため実装を参照)
\SetTblrTemplate{note-border}{normal}
キャプションを取り除く
talltblr 環境では、キャプションを付けることを前提としています。そのため、caption
キーを利用しなくてもキャプションが挿入されます。また、表のカウンタが +1 されます。
これを避けるには、label
と entry
に特別な値 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}
note
と remark
の順番を入れ替える
デフォルトでは note
→ remark
の順で書き込まれます。これは \begin{talltblr}[...]
内の note
・remark
の順を問いません。
これを入れ替えるには、以下のように lastfoot
を以下のように定義します。
\DefTblrTemplate{lastfoot}{default}{
\UseTblrTemplate{remark}{default}
\UseTblrTemplate{note}{default}
}
ところで、note
どうし、remark
どうしの順番はソース内の書き込み順序に従います。
表脚注・注釈のカスタマイズ
デフォルトの note
・remark
による表脚注・注釈はあまりに主張が強くて良くないねなので、良い感じに変更しましょう。
tabularray における note
・remark
は \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 は使えません
}
少しややこしいですが、note
のスタイル変更は表脚注のみに機能します。そのため、表内の脚注タグには影響しません。(\TblrNote
側のタグのスタイルを変更する手段が提供されていない)
もしも \TblrNote
側のタグのスタイルを変更したい場合は、\TblrNote
を再定義するなどの方策を採る必要があるでしょう。
同じような形式で contfoot
、conthead
、caption
、firsthead
、middlehead
、lasthead
、head
、firstfoot
、middlefoot
、lastfoot
、foot
のスタイルを変更できます。
このようなカスタマイズの詳細な構成方法はドキュメントを参照してほしいですが、ドキュメントの § 4 を読むだけでは不十分です。§ 8.25~29 にあるソースコードも参照してください。(v.2023A)
余談
表の脚注も注釈も tabularray で出来ちゃう。
表脚注のタグには “†” などの記号が用いられますが、手動でタグを決める必要があるので、以下のような記号類のコマンドを覚えておくと良いでしょう。(\fnsymbol
による記号は次のような順序で表示されます)
-
\textasteriskcentered
(∗) -
\textdagger
(†) -
\textdaggerdbl
(‡) -
\textsection
(§) -
\textparagraph
(¶) -
\textbardbl
(‖) -
\textasteriskcentered\textasteriskcentered
(∗∗) -
\textdagger\textdagger
(††) -
\textdaggerdbl\textdaggerdbl
(‡‡)
ちなみに、そもそも tblr 環境内で \footnote
が使えないの?と思った人もいるかもしれませんが、これはうまくいきません。なぜなら tabularray パッケージから提供される表環境は複数回に渡って表コンテンツを読むからです。これゆえにカウンタが上手く機能しません。
ページ脚注に関してはリポジトリで Issue が挙がっていますが、いまだ実現には至っていません。
標準 LaTeX における表と脚注
LaTeX は標準で表(tabular 環境)と脚注 (\footnote
) を記述することが出来ますが、これを組み合わせることは難しいです。
これは、tabular 環境内で \footnote
を利用すると、問題なくタイプセットされるのに対して、ページ最下にあるはずの脚注が表示されません。
これを解決するには以下の方法が一般的です。
-
\footnotemark
・\footnotetext
による手動指定 -
\footnote
+tablefootnote パッケージ
あるいは、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}
ただし、この方法では、同一内容の脚注に対して期待した結果を得ることが出来ません。そのため、\footnotemark
・\footnotetext
を利用してうまく手動で調整する必要があるでしょう。
この他に、threeparttable パッケージを利用することでも表脚注を作成できます。