用Springer出版社的模板排版带注释的表格时报错

发布于 2025-10-01 21:56:05

此前这个表格在Elsevier、SIAM出版社的模板均未报错,但在Springer出版社的模板报错:Package threeparttable Error: Illegal nested threeparttable environments. 附件中是最小工作示例,其中包含我编译时的.log文件。麻烦各路大神帮忙看看是否有解决办法。MWE.rar

查看更多

关注者
0
被浏览
78
啸行
啸行 1天前
这家伙很懒,什么也没写!
\documentclass[pdflatex]{sn-jnl}
\usepackage{amsmath}
\title[Article Title]{Article Title}

\begin{document}
\maketitle

\begin{table}[htb]
  \caption{Title}
  \label{tab24022314}
  \setlength{\tabcolsep}{1pt}
  \begin{tabular}{|c|c|}
    \hline
    a & b  \\
    c & d  \\
    \hline
  \end{tabular}
  \begin{tablenotes}
    \item The conditions
  \end{tablenotes}
\end{table}

\end{document}

这才是一个正确用法。你没看 sn-jnl.cls 文件,1324行已经有 \usepackage{threeparttable} 了,从1332行开始又重新定义了 table 环境,重定义里用了 threeparttable

2 个回答
Sagittarius Rover
Sagittarius Rover 13小时前
这家伙很懒,什么也没写!

@u7867 我来补充点信息吧..

MWE中的问题

首先你的mwe.tex中:

% line 13

\begin{table}[htb]
    \caption{Title} \label{tab24022314}
    \begin{threeparttable}%[htb]
        \setlength{\tabcolsep}{1pt}
        \begin{tabular}{|c|c|}}%<-多了一个「}」
        \hline
        a & b  \\ 
        c & d  \\ 
        \hline
    \end{tabular}
    \begin{tablenotes}
        \item The conditions 
    \end{tablenotes}
\end{threeparttable}
\end{table}

作为用户应该做的

我猜测你是在这里下载到的模板,在提问时,对于可公开获取的内容,理应贴出来下载链接,这样更方便保证来源的官方性.

从上述的页面可以下载到:

作为用户,在使用之前务必熟读user-manual!!!同时熟悉模板给的示例问题,并结合手册逐段做理解...

我假定你也不想去读Osvert Wang说的源码sn-jnl.cls文件...

编译你的代码可以得到如下错误:

! Package threeparttable Error: Illegal nested threeparttable environments.

See the threeparttable package documentation for explanation.
Type  H <return>  for immediate help.
 ...

l.12            \setlength
                 {\tabcolsep}{1pt}
?

什么是nested threeparttable environments呢?

你这里是table内嵌threeparttable再内嵌tabular.

事实上此时tablethreeparttable都提供了浮动环境来让tabular浮动...

作为用户,应该始终熟读「User Manual」再使用!!!

其中的7.3节告诉了正确的使用方式,和啸行老师提到的一致:

image.png

再在上面的示例中找对应的用法,此时已经自动实现了三线表:

image.png

作为用户,如果仔细阅读过「User Manual」和「示例代码」,其实是不会做出手动调用threeparttable并作神必嵌套这件事的...

你没看 sn-jnl.cls 文件,1324行已经有 \usepackage{threeparttable} 了,从1332行开始又重新定义了 table 环境,重定义里用了 threeparttable

找到那一段重定义的源码:

% sn-jnl.cls Line 1323~1350
\usepackage[figuresright]{rotating}%
\usepackage{threeparttable}

\let\tableorg\table%
\let\endtableorg\endtable%

\let\sidewaystableorg\sidewaystable%
\let\endsidewaystableorg\endsidewaystable%

\renewenvironment{table}[1][]%
{\begin{tableorg}[#1]%
\begin{center}
\begin{threeparttable}
\tablebodyfont%
\renewcommand\footnotetext[2][]{{\removelastskip\vskip3pt%
\let\tablebodyfont\tablefootnotefont%
\hskip0pt\if!##1!\else{\smash{$^{##1}$}}\fi##2\par}}%
}{\end{threeparttable}\end{center}\end{tableorg}}

\renewenvironment{sidewaystable}[1][]%
{\begin{sidewaystableorg}[#1]%
\begin{center}
\begin{threeparttable}
\tablebodyfont%
\renewcommand\footnotetext[2][]{{\removelastskip\vskip3pt%
\let\tablebodyfont\tablefootnotefont%
\hskip0pt\if!##1!\else{\smash{$^{##1}$}}\fi##2\par}}%
}{\end{threeparttable}\end{center}\end{sidewaystableorg}}

所以"什么是nested threeparttable environments呢?"

因为此时的table内部已经是一个threeparttable,所以你在table内部用threeparttable就是在嵌套threeparttable环境...

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览