![使用 Spreadtab 有条件地写入表格的行](https://linux22.com/image/325166/%E4%BD%BF%E7%94%A8%20Spreadtab%20%E6%9C%89%E6%9D%A1%E4%BB%B6%E5%9C%B0%E5%86%99%E5%85%A5%E8%A1%A8%E6%A0%BC%E7%9A%84%E8%A1%8C.png)
我正在使用spreadtab包为一些微积分编写表格。我想仅在特定条件下写入它的行,即在每一行中测试条件是否为真,然后写入此行,如果条件为假则不写入该行。当我在表格环境中执行此操作时,一切都正常,例如在此示例中,其中未写入第3行,因为“1 = 2”为假:
Tabular\\
\begin{tabular}{|c|c|}
\hline
1&1 \\ \hline
\ifnum 1=1 2&2 \fi \\ \hline
\ifnum 1=2 3&3 \\ \hline\fi
\ifnum 1=1 4&4 \fi \\ \hline
\end{tabular}
\\
End of Tabular
编译结果如下:
现在,如果我在电子表格环境中插入相同的表格,如下宏所示:
\begin{spreadtab}{{tabular}{|c|c|}}
\hline
1&1\\
\ifnum 1=1 2&2 \fi \\ \hline
\ifnum 1=2 3&3 \\ \hline\fi
\ifnum 1=1 4&4 \fi \\ \hline
\end{spreadtab}
该程序无法编译,并且出现以下错误消息:
! Undefined control sequence.
<argument> 2 \fi \@@nil
&
l.26 ^^I\end{spreadtab}
我的程序出了什么问题?我该如何修复?谢谢
答案1
如果你只想在单元格中放置文本,只需spreadtab
将字符放置在单元格中的某个位置@
,这个答案说明如何跳过&
条件语句。
带有三个参数的命令\condRow
测试第一个参数是否等于 1,表格的第一个和第二个单元格将是该命令的第二个和第三个参数。
\documentclass{article}
\usepackage{spreadtab}
\begin{document}
\newcommand{\condRow}[3]{\ifnum \numexpr#1\relax=1 #2\uppercase{&}#3\\\fi
\ifnum \numexpr#1\relax=1 \hline\fi}
\begin{spreadtab}{{tabular}{|c|c|}}
\hline
1&1\\ \hline
@\condRow{1}{34}{202}
3&3\\ \hline
4&4\\ \hline
\end{spreadtab}
\end{document}