使用spreadtab 将值从一个表格传递到另一个表格

使用spreadtab 将值从一个表格传递到另一个表格

我有两个电子表格tabulars,我想在第一个表格中计算的一些值可以在第二个表格中重复使用。

我喜欢这种tag(savedValue)方法,它允许我从表格中保存值,并在以后的文本中以\STtag{savedValue}奇特的名称和不太差的可读性重新使用。

它在文本中运行良好,但如果我将它们放在另一个tabular要执行的值中则不行(我想在第二个中再次进行计算tabular)。

以下是 MWE:

\documentclass{article}
\usepackage{spreadtab}

\begin{document}

\begin{spreadtab}{{tabular}{c}}
    10tag(savedValue)
\end{spreadtab}

\begin{spreadtab}{{tabular}{c}}
    \STtag{savedValue}
\end{spreadtab}

\end{document}

根据我的需求显示tabular了,但是给出了很多我不明白的错误:http://pastebin.com/a31RCUh7 (我的文本编辑器 TexStudio 使用“nonstopmode”)

Missing = inserted for \ifnum. \end{spreadtab}
  1. 我是否使用了适合我需求的正确软件包(spreadtab我需要以“exel”样式进行简单的计算,并将这些值从一个表格应用于另一个表格)?
  2. 我该如何纠正这个错误?我做错了什么?
  3. 我可以让 LaTeX 忽略这个特定的错误吗(因为显示似乎正确并且错误会引发我可能犯的更重要的错误)。

答案1

最好的方法是定义一个新的宏函数。它的名字可以是value(<tag>)

编辑:该列表\ST@functions@with@assign@argument也必须更新。

\documentclass{article}
\usepackage{spreadtab}
\makeatletter
\newcommand\ST@func@value[2]{%
    \ifcsname ST@celltag@\detokenize\expandafter{#1}\endcsname
        \expandafter\let\expandafter#2\csname ST@celltag@\detokenize\expandafter{#1}\endcsname
    \else
        \PackageWarning\ST@package@name{The tag "\detokenize\expandafter{#1}" does not exists, have you defined it?}%
        \def#2{0}% use 0 if tag undefined
    \fi
}
\edef\ST@functions@with@text@arg{\ST@functions@with@text@arg,value}
\edef\ST@functions@no@calc@arg{\ST@functions@no@calc@arg,value}
\edef\ST@functions@list{\ST@functions@with@range@arg,\ST@functions@with@num@arg,\ST@functions@with@text@arg}
\edef\ST@functions@with@assign@argument{\ST@functions@with@assign@argument,value}
\makeatother
\begin{document}

\begin{spreadtab}{{tabular}{cc}}
    10tag(savedValue)&tag(foobar1)20
\end{spreadtab}

\begin{spreadtab}{{tabular}{cc}}
    value(savedValue)&value(foobar1)*2
\end{spreadtab}
\end{document}

答案2

spreadtab如果单元格中有标签引用,则似乎不太可靠。您可以在宏中隐藏引用:

\documentclass{article}
\usepackage{spreadtab}

\begin{document}

\begin{spreadtab}{{tabular}{c}}
    10tag(savedValue)
\end{spreadtab}

\newcommand\foo{\STtag{savedValue}}


\begin{spreadtab}{{tabular}{c}}
\foo
\end{spreadtab}

\end{document}

答案3

还有另一种从表格中导出数据的方法:

\documentclass{article}
\usepackage{spreadtab}

\begin{document}

\begin{spreadtab}[\STsavecell\savedValue{a1}]{{tabular}{c}}
    10
\end{spreadtab}

\begin{spreadtab}{{tabular}{c}}
\savedValue
\end{spreadtab}

\end{document}

这种方式不会产生错误,而且可能比输入\STtag{}新命令更简单。

它的主要缺点是它不允许使用像tag()(标签允许我以数字结尾名称)那样花哨的名称,并且我发现使用所有不同的名称来管理不太直观(我想重复使用从第一个表格到第二个表格的几列)。

相关内容