将嵌套表格转换为与电子表格一起使用会产生错误

将嵌套表格转换为与电子表格一起使用会产生错误

以下示例代码由两个表组成。第一个表编译通过,第二个表不编译。这两个表都使用sinunitx。第二个表使用spreadtab

第二个表格与第一个表格相同,只是它已被更改为与 一起使用spreadtab。根据spreadtab文档,需要@在文本单元格中添加 ,因此我将@随意地分散在代码中,包括我认为不需要的地方。

但是,我无法编译此版本。它给出错误:

New spreadtab: \begin{longtable}{p{3in} S[table-format=6.2, round-mode=places,
round-precision=2] }
* reading tab: ok
* computing formulas:
     cell B5
* building tab: ok
! Undefined control sequence.
\@preamerr #1->\def \@tempd
                            {{..} at wrong position: }\PackageError {array}{...

l.40     \end{spreadtab}

还有一些补充评论。

  1. spreadtab似乎认为该表至少有 5 行,但实际上只有 3 行。

  2. @如果我从的开头删除CO-OPERATIVE,我会收到错误消息:

    New spreadtab: \begin{longtable}{p{3in} S[table-format=6.2, round-mode=places,
     round-precision=2] }
     * reading tab:
     ! FP error: Illegal character \BANK  found in float number!.
     \FP@errmessage #1->\errmessage {FP error: #1!}
    
     l.57     \end{spreadtab}
    

这很奇怪,因为该单元格中已经有了@,那么为什么另一个会产生影响?同样,@从 XXX-XXXX00000X 的开头删除会得到。

 ! FP error: Illegal character \XXX  found in float number!.

所有这些都使我认为spreadtab存在一些解析问题。

该代码已通过 Debian buster 10.10 和 TeX Live 2020 测试。

\documentclass[12pt]{scrartcl}
\usepackage[group-separator={,}, group-minimum-digits={3}]{siunitx}
\usepackage{longtable}
\usepackage{spreadtab}
\usepackage{lua-ul}
\begin{document}

\begin{longtable}{p{3in}
  S[table-format=6.2, round-mode=places, round-precision=2]
  }
  &Rs{.}\\
  \underLine{Name of the Deductor, TAN and Certificate No.}
  & \multicolumn{1}{c}{\begin{tabular}{@{}c@{}} TDS\\ deducted\end{tabular}}\\\cline{2-2}
  XXXXXX XXX XXXXXXXXXXX\\ CO-OPERATIVE BANK LIMITED,\\ XXX-XXXX00000X & 11111.00\\
\end{longtable}

\begin{spreadtab}{{longtable}{p{3in}
      S[table-format=6.2, round-mode=places, round-precision=2]
    }}
  &@ Rs{.}\\
  @\underLine{ Name of the Deductor, TAN and Certificate No.}
 & @ \multicolumn{1}{c}{\begin{tabular}{@{}c@{}} TDS\\ deducted\end{tabular}}\\\cline{2-2}
 @XXXXXX XXX XXXXXXXXXXX\\ @CO-OPERATIVE BANK LIMITED,\\ XXX-XXXX00000X & 11111.00\\
\end{spreadtab}

\end{document}

答案1

更新在后续问题之后。

需要更多@。特别是在表格内:@和括号内(对于siunitx}。出于显而易见的原因@{},不能使用,但在这里不需要它们。

\multicolumn{1}{c}{..至少在这个例子中,这不是必需的,因为您使用嵌套表格来使行居中。

第三个示例显示了内部嵌套的表格\multicolumn

C

\documentclass[12pt]{scrartcl}
\usepackage[group-separator={,}, group-minimum-digits={3}]{siunitx}
\usepackage{longtable}
\usepackage{spreadtab}
\usepackage{lua-ul}

\begin{document}
    
\textbf{LONGTABLE}

\begin{longtable}{p{4in}S[table-format=6.2, round-mode=places, round-precision=2]}
                                &Rs{.}\\
    \underLine{Name of the Deductor, TAN and Certificate No.}
                                &\begin{tabular}{@{}c@{}} TDS\\ deducted \\ \end{tabular}\\
    \cline{2-2}
    XXXXXX XXX XXXXXXXXXXX      &\\ 
    CO-OPERATIVE BANK LIMITED,  &\\ 
    XXX-XXXX00000X              & 11111.00\\
\end{longtable}
\bigskip

\textbf{SPREADTAB }

\begin{spreadtab}{{longtable}{p{4in}S[table-format=6.2, round-mode=places, round-precision=2]}}
                                & @ Rs{.}\\
    @ \underLine{Name of the Deductor, TAN and Certificate No.} 
                                &\begin{tabular}{c} @{TDS}\\ @{deducted}\end{tabular}\\     
    \cline{2-2}
    @ XXXXXX XXX XXXXXXXXXXX    &\\ 
    @ CO-OPERATIVE BANK LIMITED,&\\ 
    @ XXX-XXXX00000X            & @ 11111.00\\
\end{spreadtab} 

\bigskip

\textbf{SPREADTAB, using \texttt{multicolumn} }

\begin{spreadtab}{{longtable}{p{4in}S[table-format=6.2, round-mode=places, round-precision=2]}}
                                & @ Rs{.}\\
    @ \underLine{Name of the Deductor, TAN and Certificate No.} 
    & \multicolumn{1}{c}{\begin{tabular}{c} @{TDS}\\ @{deducted}\end{tabular}}\\    
    \cline{2-2}
    @ XXXXXX XXX XXXXXXXXXXX    &\\ 
    @ CO-OPERATIVE BANK LIMITED,&\\ 
    @ XXX-XXXX00000X            & @ 11111.00\\
\end{spreadtab} 

\end{document}

答案2

longtblr新环境的替代解决方案tabularray包:您不需要使用嵌套表来获取多行单元格。

\documentclass[12pt]{scrartcl}

\usepackage[group-separator={,}, group-minimum-digits={3}]{siunitx}
\usepackage{spreadtab}
\usepackage{lua-ul}

\usepackage{tabularray}
\UseTblrLibrary{siunitx}

\begin{document}

\begin{spreadtab}{{longtblr}{p{4in}S[table-format=6.2, round-mode=places, round-precision=2]}}
                                & @ Rs{.} \\
    @ \underLine{Name of the Deductor, TAN and Certificate No.} 
                                & @ {{{TDS \\ deducted}}} \\     
    \cline{2-2}
    @ XXXXXX XXX XXXXXXXXXXX    & \\ 
    @ CO-OPERATIVE BANK LIMITED,& \\ 
    @ XXX-XXXX00000X            & @ 11111.00 \\
\end{spreadtab} 

\end{document}

相关内容