我正在尝试创建一个矩阵表,该表将根据我可以更改的输入迭代地填充单元格。我最初尝试这里显示的解决方案,\i
但是当我实际在单元格中使用迭代值而不是像t1
和这样t2
的纯文本时,我无法让 Latex 正确扩展。
所以我也遇到了这个很棒的解决方案,哪个做过处理输入\i
值。但是,在对该\i
值和其他值进行数学运算时,我遇到了问题。根据第二种解决方案,这是我的 MWE:
\documentclass[]{article}
\usepackage{tikz}
\usepackage{tabularx}
\begin{document}
\newcommand\costsmall{60}
\newcommand\costmed{80}
\newcommand\costlarge{100}
\newcommand\rentsmall{10}
\newcommand\rentmed{15}
\newcommand\rentlarge{20}
\makeatletter
\newtoks\@tabtoks
\newcommand\addtabtoks[1]{\global\@tabtoks\expandafter{\the\@tabtoks#1}}
\newcommand\eaddtabtoks[1]{\edef\mytmp{#1}\expandafter\addtabtoks\expandafter{\mytmp}}
\newcommand*\resettabtoks{\global\@tabtoks{}}
\newcommand*\printtabtoks{\the\@tabtoks}
\makeatother
\resettabtoks
\addtabtoks{\textbf{Num1} & \textbf{Num2} & \textbf{Num3} & \textbf{Num2/Num3}\\ \cline{1-4}}
\foreach \x [count=\xi] in {\costsmall,\costmed,\costlarge}{
\foreach \y [count=\yi] in {\the\numexpr\x - 10,\the\numexpr\x,\the\numexpr\x + 10}{
\foreach \z [count=\zi] in {\rentsmall,\rentmed,\rentlarge}{
\ifnum\zi=2 {
\ifnum\yi=2 {
\eaddtabtoks{\x}
}
\else {
}
\fi
\addtabtoks{&}
\eaddtabtoks{\y}
\addtabtoks{&}
}
\else {
\addtabtoks{ & & }
}
\fi
\eaddtabtoks{\z }
\addtabtoks{&}
% \newcommand{\testthing}[2]{y is #1, z is #2, and together they are #1/#2}
% \testthing{\y}{\z}
\eaddtabtoks{\y/\z}
\addtabtoks{\\}
\ifnum\zi=3 {
\ifnum\yi=3 {
\addtabtoks{ \cline{1-4} }
}
\else{
\addtabtoks{ \cline{2-4} }
}
\fi
}
\fi
}
}
}
\begin{tabularx}{\textwidth}{|c|c|c|c|c|}
\printtabtoks
\end{tabularx}%
\end{document}
结果,我得到了这个图,其中大多数情况下“要支付的租金数量”显然计算错误:
在此代码中,这是行\eaddtabtoks{\y/\z}
。我能够追溯它并发现它在所有将\y
10 减去或添加到\foreach
行中的情况中都失败了。在这些情况下,它看起来像是一种奇怪的运算顺序,或者10
不被视为数字或其他东西。我\y/\z
无休止地玩弄这行,尝试了不同的选项\the\numexpr
和括号和圆括号来正确完成运算顺序,但似乎没有任何效果。
附注:我确实不得不使用这种\ifnum\zi=2
居中前几个多列的棘手方法,因为我无法让多列使用此方法工作。 \multicolumn{9}{*}{random}
使用像 这样的字符串可以正常工作random
,但是一旦我输入像\x
或 这样的迭代器\y
,我就会收到无法修复的错误。