tabular、siunitx 和输入 - `Extra },或者忘记了 $。`

tabular、siunitx 和输入 - `Extra },或者忘记了 $。`

我正在尝试将数据纳入表格环境

\usepackage{booktabs}
\usepackage{siunitx}

\begin{table}
  \begin{center}
    \begin{tabular}{SSSS}
      \toprule
      {$na^3$} & {$V_0/T_c^0$} & {$T_c/T_c^0$} & {$\nu$} \\
      \midrule
      \input{../results/110718/all.tex}
      \bottomrule
    \end{tabular}
    \caption{bla}
  \end{center}
\end{table}

编译时我收到错误消息Extra }, or forgotten $.

当我all.tex手动插入时,它有效:

% ...      
      \midrule
      0 & 0 & 0.99959(72) & 0.882(44) \\
      % ...
      5e-3 & 2 & 1.02710(66) & 0.757(73) \\
      5e-3 & 7 & 0.53844(100) & 0.75(10) \\
      \bottomrule
% ...

只需复制粘贴,all.tex已经包含了与号和反斜杠。

当我不使用时siunitx,它也能工作:

% ...
    \begin{tabular}{cccc}
      \toprule
      {$na^3$} & {$V_0/T_c^0$} & {$T_c/T_c^0$} & {$\nu$} \\
      \midrule
      \input{../results/110718/all.tex}
      \bottomrule
    \end{tabular}
% ...

booktabs似乎不会引起问题。当我删除规则时它仍然不起作用booktabs

该文件all.tex是自动生成的。因此,手动添加它实际上不是一个选择。而且由于它的格式化功能很好,siunitx我真的很想使用它。

我正在使用 TeX-Live 2011-05-26。

什么原因导致了此错误?我该如何解决这个问题?

答案1

正如 Mikael 所评论的,这里的问题是如何扩展数字。在标准模式下,siunitx需要在排版之前收集数字。诀窍是使用额外的列。这将在没有任何额外软件包的情况下工作:

\documentclass{article}
\usepackage{booktabs}
\usepackage{siunitx}
\begin{filecontents*}{all.tex}
& 1.1 & 2.2 & 3.3 & 4.4 \\
\end{filecontents*}
\begin{document}
\begin{table}
  \begin{center}
    \begin{tabular}{l@{}SSSS}
      \toprule
      & {$na^3$} & {$V_0/T_c^0$} & {$T_c/T_c^0$} & {$\nu$} \\
      \midrule
      \input{all.tex}
      \bottomrule
    \end{tabular}
    \caption{bla}
  \end{center}
\end{table}
\end{document}

siunitx手册中有一个例子,datatool它做了类似的事情,但使用 CSV 格式的数据。在这里改编它:

\documentclass{article}
\usepackage{booktabs}
\usepackage{datatool,siunitx}
\begin{filecontents*}{all.csv}
valuea,valueb,valuec,valued
1.1,2.2,3.3,4.4
\end{filecontents*}
\DTLloaddb{data}{all.csv}
\begin{document}
\begin{table}
  \begin{center}
    \begin{tabular}{SSSS@{}l}
      \toprule
      {$na^3$} & {$V_0/T_c^0$} & {$T_c/T_c^0$} & {$\nu$}  &
        \DTLforeach{data}
          {\myvaluea=valuea,\myvalueb=valueb,\myvaluec=valuec,\myvalued=valued}{%
          \DTLiffirstrow {\\ \midrule}{\\}%
          \myvaluea & \myvalueb & \myvaluec & \myvalued &
        }
      \\
      \bottomrule
    \end{tabular}
    \caption{bla}
  \end{center}
\end{table}
\end{document}

如果您不想使用附加列,请关闭siunitx数字解析器:

\documentclass{article}
\usepackage{booktabs}
\usepackage{siunitx}
\begin{filecontents*}{all.tex}
1.1 & 2.2 & 3.3 & 4.4 \\
\end{filecontents*}
\begin{document}
\begin{table}
  \sisetup{parse-numbers = false}
  \begin{center}
    \begin{tabular}{SSSS}
      \toprule
      \multicolumn{1}{c}{$na^3$} & \multicolumn{1}{c}{$V_0/T_c^0$} & 
        \multicolumn{1}{c}{$T_c/T_c^0$} & \multicolumn{1}{c}{$\nu$} \\
      \midrule
      \input{all.tex}
      \bottomrule
    \end{tabular}
    \caption{bla}
  \end{center}
\end{table}
\end{document}

相关内容