我有两个电子表格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}
- 我是否使用了适合我需求的正确软件包(
spreadtab
我需要以“exel”样式进行简单的计算,并将这些值从一个表格应用于另一个表格)? - 我该如何纠正这个错误?我做错了什么?
- 我可以让 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()
(标签允许我以数字结尾名称)那样花哨的名称,并且我发现使用所有不同的名称来管理不太直观(我想重复使用从第一个表格到第二个表格的几列)。