长话短说:我正在尝试提出一个系统,通过 Pandoc 从 YAML 文件动态生成 LaTeX 表,并使用该spreadtab
包进行一些计算。
到目前为止一切顺利,表格获得了应有的输出,并且spreadtab
出色地完成了它的工作。
但现在我有一个问题。我需要找到一种方法来告诉spreadtab
需要求和的单元格范围。由于表格是动态生成的,因此此参数也需要是动态的。而且由于有 决不使用 Pandoc 用计数器跟踪循环中的迭代次数,我需要使用 LaTeX 创建所述计数器。
这是我想到解决方案(剧透:它不起作用):
\newcounter{pos}
\setcounter{pos}{0}
\begin{spreadtab}{{tabular}[t t t]{lp{8.2cm}r}}
@ Pos. & @ Leistung/Beschreibung & @ Preise in EUR \\ \hline
@ \refstepcounter{pos} \thepos & @ Die erste Leistung & 750.0 \\
@ \refstepcounter{pos} \thepos & @ Die zweite Leistung & 180.0 \\
@ \refstepcounter{pos} \thepos & @ Die dritte Leistung & 55.0 \\
@ \refstepcounter{pos} \thepos & @ Die vierte Leistung & 55.0 \\
\hline
@ & @ \multicolumn{1}{r}{Nettobetrag:} & :={sum(c1:c\thepos)} \\
\end{spreadtab}
棘手的部分在表格的最后一行。在每一行增加计数器后,我的计划是在公式中使用相同的计数器spreadtab
来设置需要求和的单元格的范围。不幸的是,spreadtab
在读取表格时似乎没有扩展计数器,并且它返回错误:Invalid range in cell C6
。
我仔细考虑了一下,觉得这个问题的解决方案超出了我的能力范围。所以现在我问你:如何使用一个spreadtab
可以识别的动态参数,或者如何告诉spreadtab
扩展计数器命令前执行公式?
谢谢你的帮助。
答案1
我建议另一种解决方案:使用相对引用(如手册中所述spreadtab
),即使用sum(c2:[0,-1])
而不是sum(c1:c\thepos)
。 (注意我换成了c1
–c2
是c1
列的头部,而要加起来的第一个数字是c2
。)
使用来自你的其它问题:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{spreadtab,array}
\usepackage{arydshln}
\renewcommand{\arraystretch}{1.5}
\usepackage{hhline}
\newcounter{pos}
\begin{document}
\STautoround*{2}
\STsetdecimalsep{,}
\begin{spreadtab}{{tabular}[t t t]{lp{8.2cm}r}}
\hdashline[1pt/1pt]
@ \textbf{Pos.} &
@ \textbf{Leistung/Beschreibung} &
@ \textbf{Preise in EUR} \\ \hline
@ \refstepcounter{pos} \thepos & @ Die erste Leistung & 750.0 \\
@ \refstepcounter{pos} \thepos & @ Die zweite Leistung & 180.0 \\
@ \refstepcounter{pos} \thepos & @ Die dritte Leistung & 55.0 \\
@ \refstepcounter{pos} \thepos & @ Die vierte Leistung & 55.0 \\
% @ \refstepcounter{pos} \thepos & @ Noch eine Leistung & 12.0 \\
@ \refstepcounter{pos} \thepos & @ Noch eine Leistung & 56.3 \\
% @ \refstepcounter{pos} \thepos & @ Noch eine Leistung & 987.0 \\
% @ \refstepcounter{pos} \thepos & @ Noch eine Leistung & 45.0 \\
% @ \refstepcounter{pos} \thepos & @ Noch eine Leistung & 31.31 \\
\hline
@ &
@ \multicolumn{1}{r}{\textbf{Rechnungsbetrag:}} &
\textbf{:={sum(c2:[0,-1])}}
\\ \hhline{~~-}
\end{spreadtab}
\end{document}