threeparttablex 表格注释,用于宽度小于 \textwidth 的 tabulars

threeparttablex 表格注释,用于宽度小于 \textwidth 的 tabulars

threeparttablex可用于向tabu表格添加表格注释*。如果表格跨越 \textwidth,则输出符合预期。然而,似乎附注如果表格很窄,环境就不会调整其宽度,尽管这当然是可取的。

1)是否有任何选项/命令旨在自动调整附注环境的宽度?

2)如果没有,有没有解决方法?

@ 2)根据这个答案threeparttablex确实知道表格的宽度。此外,考虑到对于据称基于的threeparttablethreeparttablex,包文档指出“您可以重新定义整个 tablenotes 环境”,似乎应该可以找到一种解决方法。

\documentclass{article}
\usepackage{booktabs}
\usepackage{tabu}
\usepackage{threeparttablex}

\begin{document}    
\centering
\begin{ThreePartTable}
    \begin{tabu} to .4\textwidth {XX}
        a & b   \\\toprule
        0 & 1   \\\bottomrule
    \end{tabu}
    \begin{tablenotes}
        \footnotesize
        \item[*] This is a long table note text, long enough to exceed the table's width.
    \end{tablenotes}
\end{ThreePartTable}
\end{document}

*threeparttablex旨在扩展threeparttablelongtable。尽管手册中没有提到它,但它threeparttablex可以与 一起使用tabu,而 则threeparttable不行。替换threeparttablex三部分表上述代码中的环境三部分表环境给出了“额外},或忘记了\endgroup。”的错误。

答案1

我不知道如何使用threeparttablex,但似乎旧的threeparttable应该足够了:前者是用于longtable而你似乎没有使用longtabu(恐怕应该重写threeparttablex以使用longtabu环境)。

\documentclass{article}
\usepackage{booktabs}
\usepackage{tabu}
\usepackage{threeparttable}

\usepackage{xpatch}
\makeatletter
\chardef\TPT@@@asteriskcatcode=\catcode`*
\catcode`*=11
\xpatchcmd{\threeparttable}
  {\TPT@hookin{tabular}}
  {\TPT@hookin{tabular}\TPT@hookin{tabu}}
  {}{}
\catcode`*=\TPT@@@asteriskcatcode
\makeatother

\begin{document}
\centering
\begin{threeparttable}
    \begin{tabu} to .4\textwidth {XX}
        a & b   \\\toprule
        0 & 1   \\\bottomrule
    \end{tabu}
    \begin{tablenotes}
        \footnotesize
        \item[*] This is a long table note text, long enough to exceed the table's width.
    \end{tablenotes}
\end{threeparttable}

\end{document}

在此处输入图片描述


如果你没有xpatch,那么改变线

\xpatchcmd{\threeparttable}

进入

\expandafter\patchcmd\csname\string\threeparttable\endcsname

并加载etoolbox而不是xpatch


补丁如何工作?在threeparttable.sty名为 的宏中\TPT@hookin,需要将表创建环境的名称作为参数。threeparttable环境执行\TPT@hookin{tabular}\TPT@hookin{tabular*}\TPT@hookin{tabularx},因此我们只需添加\TPT@hookin{tabu}

有一个小问题,Donald Arsenau*在定义 时将 的类别代码更改为 11。\threeparttable提供的修补宏etoolboxxpatch甚至regexpatch所有 都会反汇编命令以进行修补并重建它,以查看类别代码是否存在问题,从而导致修补后的宏的行为与预期不同,因此我们需要注意该更改:将*设置为类别代码 11,然后恢复其原始类别代码。

相关内容