在编译期间生成LaTeX表格代码

时间:2012-04-18 20:11:27

标签: latex

我使用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命令,也没有forwhile循环,尽管有些包提供了一些附加功能。那么,如何实现呢?或者,我应该将哪些LaTeX命令,软件包和/或额外工具用于此任务?

感谢您的帮助:)

0 个答案:

没有答案