我几乎已经完成切换,tabularray
但只剩下一个最后的问题需要解决。
使用\footnote
insidetblr
无法正常工作,但这是大多数(所有?)类似表格的环境的已知问题。经过一番研究,我尝试了这个:
\documentclass{article}
\usepackage{tabularray}
\usepackage{footnote}
\makesavenoteenv{tblr}
\UseTblrLibrary{counter}
\begin{document}
\begin{tblr}{colspec={ll}}
a line & a text\footnote{with a note} in the middle\\
another line & another text\footnote{with another note} in the middle
\end{tblr}
\end{document}
感谢\UseTblrLibrary{counter}
,表格内的脚注编号正确,但脚注本身处理得很糟糕,出现多次:
第二次尝试,我使用了\TblrNote
提供的tabularray
:
\documentclass{article}
\usepackage{tabularray}
\begin{document}
\begin{longtblr}[
note{1}={with a note},
note{2}={with another note}
]{colspec={ll}}
a line & a text\TblrNote{1} in the middle\\
another line & another text\TblrNote{2} in the middle
\end{longtblr}
\end{document}
结果是:
但这种解决方案并不令人满意,原因如下:
- 表格中的脚注编号无法正确处理其后的空格,如上图所示。
- 我必须手动对脚注进行编号,这在 LaTeX 中是大忌。
- 脚注本身并不像普通脚注那样呈现:字体大小错误,上方没有水平线,并且其编号忽略了其他页面上先前存在的脚注。
有没有一种干净的方法可以获得真正的脚注tabularray
?感谢您的关注。
答案1
如果您的文档运行良好,则无需更新文档或 TeX 发行版。事实上,我的大部分文档仍在使用传统tabular
环境,在 10 年前的 MiKTeX 发行版上编译。:-)
无论如何,这是一个可能的解决方案。使用新添加的functional
库,您可以将每个脚注拆分为\footnotemark
和\footnotetext
,然后使用一些钩子在表格后添加脚注文本。也许它并不完美,但至少它可以工作。
\documentclass{article}
\usepackage[a6paper]{geometry}
\usepackage{tabularray}
\UseTblrLibrary{counter}
\UseTblrLibrary{functional}
\makeatletter
\IgnoreSpacesOn
\tlNew \gFootNoteTl
\intNew \gFootNoteInt
\prgNewFunction \footNote {m}
{
\tlPutRight \gFootNoteTl
{
\stepcounter{footnote}
\footnotetext{#1}
}
\prgReturn {\footnotemark{}}
}
\AddToHook{env/tblr/before}{
\intSetEq \gFootNoteInt \c@footnote
\tlClear \gFootNoteTl
}
\AddToHook{env/tblr/after}{
\intSetEq \c@footnote \gFootNoteInt
\tlUse \gFootNoteTl
}
\IgnoreSpacesOff
\makeatother
\begin{document}
Some note\footnote{some note} before.
\bigskip
\begin{tblr}[evaluate=\footNote]{colspec={ll},hlines}
a line & a text\footNote{with a note} in the middle\\
another line & another text\footNote{with another note} in the middle
\end{tblr}
\bigskip
\begin{tblr}[evaluate=\footNote]{colspec={ll},hlines}
a line & a text\footNote{with a note} in the middle\\
another line & another text\footNote{with another note} in the middle
\end{tblr}
\bigskip
Another note\footnote{another note} after.
\end{document}
答案2
我想添加另一个答案来对talltblr
包longtblr
中的表格注释做一些解释tabularray
。
该\TblrNote
命令类似于\tnote
in threeparttable
package 和\tnotex
in threeparttablex
package。表格注释与脚注不同。它们放在表格之后。因此最好不要将它们与脚注混淆。许多用户选择使用字母值(a、b、c、...)作为注释标记。
您需要在\TblrNote
命令中指定注释标记,但这样做的好处是您可以在不同的命令中给出相同的注释标记\TblrNote
(见下面的示例)。一些用户认为这很有用。
默认情况下,\TblrNote
命令也会使用注释标记(这也是和包中和命令\rlap
的默认设置)。原因之一是它使数字对齐良好(参见下面的示例)。\tnote
\tnotex
threeparttable
\threeparttablex
siunitx
您可以通过重新定义命令更改默认设置\TblrOverlap
。
\renewcommand\TblrOverlap[1]{#1}
上面的代码行删除了默认\rlap
设置。
\TblrNote
现在这里有一个完整的示例,展示了命令的用法:
\documentclass{article}
\usepackage{tabularray}
\UseTblrLibrary{booktabs,siunitx}
\begin{document}
\begin{talltblr}[
caption = {First Table},
note{a} = {with a note},
note{b} = {with another note}
]{
colspec = {S[table-format=3.2]S[table-format=3.2]},
row{1} = {guard}
}
\toprule
Some Head Text & Some Head Text \\
\midrule
111.22 & 111.22\TblrNote{a} \\
222.33\TblrNote{b} & 222.33 \\
333.44 & 333.44\TblrNote{b} \\
\bottomrule
\end{talltblr}
\vspace{2em}
\renewcommand\TblrOverlap[1]{#1}
\begin{talltblr}[
caption = {Second Table},
note{a} = {with a note},
note{b} = {with another note}
]{colspec={ll}}
\hline
a line & a text\TblrNote{a} in the middle \\
another line & another text\TblrNote{b} in the middle \\
\hline
\end{talltblr}
\end{document}
答案3
这只是对 LJR 答案的一个微小修改,适用于longtblr
,即:
\documentclass{article}
\usepackage{geometry}
\usepackage{tabularray}
\UseTblrLibrary{counter}
\UseTblrLibrary{functional}
\makeatletter
\IgnoreSpacesOn
\tlNew \gFootNoteTl
\intNew \gFootNoteInt
\prgNewFunction \footNote {m}
{
\tlPutRight \gFootNoteTl
{
\stepcounter{footnote}
\footnotetext{#1}
}
\prgReturn {\footnotemark{}}
}
\AddToHook{env/longtblr/before}{
\intSetEq \gFootNoteInt \c@footnote
\tlClear \gFootNoteTl
}
\AddToHook{env/longtblr/after}{
\intSetEq \c@footnote \gFootNoteInt
\tlUse \gFootNoteTl
}
\IgnoreSpacesOff
\makeatother
\begin{document}
Some note\footnote{some note} before.
\bigskip
\begin{longtblr}[evaluate=\footNote]{colspec={ll},hlines}
a line & a text\footNote{with a note} in the middle\\
another line & another text\footNote{with another note} in the middle
\end{longtblr}
\bigskip
Another note\footnote{another note} after.
\end{document}