我在表格环境中呈现了数据,我想在 LaTeX 中以需要同时分析多个单元格的方式处理这些数据。这还不包括对单元格本身进行排版。
例如,我的源文件包含以下内容
\begin{mytabularpresentation}
stuff & more stuff & yes \\
data & more data & no \\
\end{mytabularpresentation}
除了显示“东西”,“是”等之外,我还想处理“东西”和“是”(即我想要运行\somecommand{stuff}{yes}
),“数据”和“否”等等。
这是一个带有玩具示例的 M-ish WE。我使用全局变量来存储单元格内容,稍后在同一行上调用它们。
\documentclass{article}
\usepackage{calc}
\usepackage{array}
\usepackage{collcell}
\newcommand{\labelcell}[1]{#1}
\newcolumntype{L}{>{\collectcell\labelcell}l<{\endcollectcell}}
\newcommand{\aye}[1]{\gdef\ayecontents{#1}#1}
\newcolumntype{A}{>{$\collectcell\aye}r<{\endcollectcell$}}
\newcommand{\bee}[1]{\gdef\beecontents{#1}#1}
\newcolumntype{B}{>{$\collectcell\bee}r<{\endcollectcell$}}
\newcolumntype{R}{>{$}r<{$}}
\newcounter{result}
\newcommand{\calcvalue}[1]{\setcounter{result}{#1}\theresult}
\begin{document}
\begin{tabular}{LABR}
sum & 3 & 2 & \calcvalue{\ayecontents+\beecontents} \\
product & 3 & 2 & \calcvalue{\ayecontents*\beecontents} \\
negative & 3 & & \calcvalue{-\ayecontents} \\
square root & \omit & 4 & \sqrt{\beecontents} \\
\omit & 76 & 89 & \calcvalue{\ayecontents*(42-\beecontents)} \\
\end{tabular}
\end{document}
这非常脆弱。在我的实际使用案例中,我遇到了一些复杂情况,例如带有单元格\omit
(必须检测到,而不是重复使用上一行的内容)和嵌套表格。
我想做的一件事是收集整行的信息,而上面的示例没有做到这一点。我想到了\everycr
,但是LaTeX 并不真正支持它,当我尝试强制执行它时,它会导致错误,我想是因为我有一些不可扩展的\everycr
内容,这些内容最终出现在下一行的第一个单元格的开头。MNWE:
\documentclass{article}
\usepackage{array}
\makeatletter
\newcommand{\ialignwitheverycr}[1]{%
}
\newenvironment{tabularwitheverycr}[1]{%
\let\orig@ialign\ialign%
\def\ialign{\everycr{#1}\tabskip\z@skip\let\ialign\orig@ialign\halign}%
\tabular%
}{%
\endtabular%
}
\makeatother
\begin{document}
\begin{tabularwitheverycr}{\def\stuff{}}{rl}
one & two \\
\multicolumn{1}{l}{hello} & world \\
\end{tabularwitheverycr}
\end{document}
错误:Misplaced \omit.
在\multicolumn
通话中(以及一系列后果)。
我如何从每行的多个列中收集数据并对其采取行动?有没有现成的包?如果我需要自己动手,有没有比全局变量更好的方法,我如何“完成”一行?
请注意,我想保留源原样。我不会将源更改为\somekindofrow{sum}{3}{2}{\calcvalue{\ayecontents+\beecontents}}
。