带脚注的 Tabularray

带脚注的 Tabularray

我几乎已经完成切换,tabularray但只剩下一个最后的问题需要解决。

使用\footnoteinsidetblr无法正常工作,但这是大多数(所有?)类似表格的环境的已知问题。经过一番研究,我尝试了这个:

\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},表格内的脚注编号正确,但脚注本身处理得很糟糕,出现多次:

结果1

第二次尝试,我使用了\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}

结果是:

结果2

但这种解决方案并不令人满意,原因如下:

  • 表格中的脚注编号无法正确处理其后的空格,如上图所示。
  • 我必须手动对脚注进行编号,这在 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

我想添加另一个答案来对talltblrlongtblr中的表格注释做一些解释tabularray

\TblrNote命令类似于\tnotein threeparttablepackage 和\tnotexin threeparttablexpackage。表格注释与脚注不同。它们放在表格之后。因此最好不要将它们与脚注混淆。许多用户选择使用字母值(a、b、c、...)作为注释标记。

您需要在\TblrNote命令中指定注释标记,但这样做的好处是您可以在不同的命令中给出相同的注释标记\TblrNote(见下面的示例)。一些用户认为这很有用。

默认情况下,\TblrNote命令也会使用注释标记(这也是和包中和命令\rlap的默认设置)。原因之一是它使数字对齐良好(参见下面的示例)。\tnote\tnotexthreeparttable\threeparttablexsiunitx

您可以通过重新定义命令更改默认设置\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}

在此处输入图片描述

相关内容