threeparttablex
可用于向tabu
表格添加表格注释*。如果表格跨越 \textwidth,则输出符合预期。然而,似乎附注如果表格很窄,环境就不会调整其宽度,尽管这当然是可取的。
1)是否有任何选项/命令旨在自动调整附注环境的宽度?
2)如果没有,有没有解决方法?
@ 2)根据这个答案,threeparttablex
确实知道表格的宽度。此外,考虑到对于据称基于的threeparttable
包threeparttablex
,包文档指出“您可以重新定义整个 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
旨在扩展threeparttable
到longtable
。尽管手册中没有提到它,但它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
提供的修补宏etoolbox
,xpatch
甚至regexpatch
所有 都会反汇编命令以进行修补并重建它,以查看类别代码是否存在问题,从而导致修补后的宏的行为与预期不同,因此我们需要注意该更改:将*
设置为类别代码 11,然后恢复其原始类别代码。