我使用LaTeX进行脑成像(fMRI)的科学报告。我在LaTeX中有一个tabular
数组,它包含很多行和列,它们都是大脑区域,在每个交叉单元格中都有一些关于它们连接的数据。
此tabular
数组的内容在使用\input
命令加载的另一个.tex文件中单独定义。在另一个.tex文件中,使用数百个tabular
命令分别定义\newcommand
数组的每个单元格的内容。在tabular
数组中除了这些\newcommand
命令之外没有其他内容。 tabular
数组位于\begin{spreadtab}
内,以允许对单元格值进行一些基本计算(尽管这不是必需的)。到目前为止一切正常。
因此,\newcommand
定义如下所示:
\newcommand{\origREGIONONEdestREGIONONE}{ NA } % NA for cells on the diagonal.
\newcommand{\origREGIONONEdestREGIONTWO}{ - } % this is the default case.
...
\newcommand{\origREGINOTWOdestREGIONTWO}{ NA }
\newcommand{\origREGIONTWOdestREGIONONE}{ \ref{Spielberg1981} }
\newcommand{\origREGIONTWOdestREGIONTHREE}{ bilateral \ref{Cameron1989} }
...
所有列x行交叉点都有一个特定的\newcommand
定义。
tabular
数组代码看起来像这样(3x3示例,但实际上它大于20x20):
\tiny
\begin{table}
\scalebox{0.6}{
\begin{spreadtab}{{tabular}{*{3}{c}}}
\hline
\to/from :={} & REGION 1 :={} & REGION 2 :={} & REGION 3 :={} \\
\hline
to REGIONONE :={} & \origREGIONONEdestREGIONONE :={} & \origREGIONTWOdestREGIONONE :={} &\origREGIONTHREEdestREGIONONE :={} \\
to REGIONTWO :={} & \origREGIONONEdestREGIONTWO :={} & \origREGIONTWOdestREGIONTWO :={} &\origREGIONTHREEdestREGIONTWO :={} \\
to REGIONTHREE :={} & \origREGIONONEdestREGIONTHREE :={} & \origREGIONTWOdestREGIONTHREE :={} &\origREGIONTHREEdestREGIONTHREE :={} \\
\hline
\end{spreadtab}
} % end scalebox
\caption{A table of connections between brain regions 1, 2 & 3}
\begin{enumerate}
\item \cite{Spielberg1981}\label{Spielberg1981}
\item \cite{Cameron1989}\label{Cameron1989}
\end{enumerate}
\end{table}
\normalsize
现在我想要的是能够根据列表或字符串数组(或使用任何可能的数据类型)动态生成类似的tabular
定义:
在MATLAB语法中它将是:ListOfBrainRegions = { 'BRAINREGIONABC', 'BRAINREGIONDEF', 'BRAINREGIONXYZ' }
在Python语法中:ListOfBrainRegions = [ 'BRAINREGIONABC', 'BRAINREGIONDEF', 'BRAINREGIONXYZ' ]
如果列表或数组导致某些问题,则会在spreadtab
内(或没有spreadtab
)将列表或数组转换为此类代码:
\hline
to REGIONABC :={} & \origREGIONABCdestREGIONABC :={} & \origREGIONDEFdestREGIONABC :={} &\origREGIONXYZdestREGIONABC :={} \\
to REGIONDEF :={} & \origREGIONABCdestREGIONDEF :={} & \origREGIONDEFdestREGIONDEF :={} &\origREGIONXYZdestREGIONDEF :={} \\
to REGIONXYZ :={} & \origREGIONABCdestREGIONXYZ :={} & \origREGIONDEFdestREGIONXYZ :={} &\origREGIONXYZdestREGIONXYZ :={} \\
\hline
那么,我应该如何在LaTeX中定义ListOfBrainRegions
?然后,如何在编译.tex文件时生成LaTeX代码?如果我用其他编程语言对其进行编程,例如在MATLAB,Common Lisp或awk中,那么任务(生成程序代码)根本不会很困难。似乎LaTeX没有内置数组if
... elseif
... else
命令,也没有for
或while
循环,尽管有些包提供了一些附加功能。那么,如何实现呢?或者,我应该将哪些LaTeX命令,软件包和/或额外工具用于此任务?
感谢您的帮助:)