由于标题,带有 lineno 的行号(edtable)在 threeparttable 内中断

由于标题,带有 lineno 的行号(edtable)在 threeparttable 内中断

我尝试使用 显示表格的行号lineno,即edtable。表格使用 设置threeparttable,行号工作正常,但包含标题时编译失败。显示的错误消息是you can't use \hrule here except with leaders。我使用caption包,但使用 KOMA 标题时编译也会失败。MWE 说明了这个问题。

\documentclass{scrartcl}

\usepackage{threeparttable}
\usepackage{caption}
\usepackage[edtable]{lineno}

% That's the definition of caption@hrule from caption3.sty
% Redefine something here?
% \makeatletter
% \renewcommand*\caption@hrule{\hrule\@height\z@}
% \makeatother

\begin{document}

\begin{table}\centering
\begin{threeparttable}
\caption{A simple table}
\resetlinenumber[1]
\begin{edtable}{tabular}{l*{3}{c}}
                          & \multicolumn{1}{c}{(1)}   & \multicolumn{1}{c}{(2)}   & \multicolumn{1}{c}{(3)}   \\
Variable 1                &  1.85                     & 0.92                      & 1.11                      \\
                          & (0.34)                    & (0.24)                    & (0.14)                    \\
\end{edtable}
\end{threeparttable}
\end{table}

\end{document}

答案1

经过一些头痛之后:

\documentclass{scrartcl}

\usepackage[edtable]{lineno}
\usepackage{caption}
\usepackage{threeparttable}

\usepackage{xpatch}
\makeatletter
\newenvironment{etabular}
  {\resetlinenumber[1]\let\@centercr\relax\edtable{tabular}}
  {\endedtable}
\newenvironment{etabular*}
  {\resetlinenumber[1]\let\@centercr\relax\edtable{tabular*}}
  {\endedtable}

\catcode`\*=11
\xpatchcmd{\threeparttable}
 {\TPT@hookarg{tabularx}}
 {\TPT@hookarg{tabularx}\TPT@hookin{etabular}\TPT@hookarg{etabular*}}
 {}{}
\catcode`\*=12
\makeatother


\begin{document}

\begin{table}\centering
\begin{threeparttable}[b]
\caption{A simple table}
\begin{etabular}{l*{3}{c}}
           & \multicolumn{1}{c}{(1)} & \multicolumn{1}{c}{(2)} & \multicolumn{1}{c}{(3)} \\
Variable 1 &  1.85\tnote{1}          & 0.92                    & 1.11                    \\
           & (0.34)                  & (0.24)                  & (0.14)                  \\
\end{etabular}
\begin{tablenotes}
\item[1] A note
\end{tablenotes}
\end{threeparttable}
\end{table}

\end{document}
  1. 应该让环境edtable为人所知threeparttable

  2. 但是我们不能将它传递给钩子,因为它edtable有一个可选参数,所以我对它使用了一个“包装器”;

  3. 该命令\resetlinenumber在 中是不允许的threeparttable,所以我在新环境中将其隐藏;

  4. 发出\@centercr的会edtable导致臭名昭著的“可能缺失\item”错误,因此我将其中和;

  5. 环境\threeparttable已修补,使得etabular了解环境(参见这个答案)。

etabular*对内部调用 的环境也做了类似的修补\begin{edtable}{tabular*}。在这种情况下,必须使用\TPT@hookarg而不是\TPT@hookin,就像 for 一样tabular*

在此处输入图片描述

相关内容