包含主表行的表

包含主表行的表

我有一个包含参考项目的大型主table*表,这是此类项目的简单跨项目数据库。现在我想将此主表的各个部分包含在不同的文档中,并根据特定文档的重点选择任意行。

举个例子:主表包含游戏中可以购买的物品。典型的一行包含物品的标签、成本、重量、一些属性和描述列。现在我有不同的 XeLaTeX 文档,其中包含专注于特定时间段(中世纪、文艺复兴、现代、科幻小说等)的游戏规则。主表中的某些项目在某些时间段使用(例如剑或手机)。下面是两个这样的行的简短示例:

Hammer & 1 & 0 & 1 & 10 & 1 & \\
Longsword & 2 & -1 & 2 & 75 & 2 & two-handed \

我想从主表中手动挑选要在单个表中显示的项目(而不是按某些字段或标志进行过滤),但只想引用基本记录,这样如果我在主表上进行更改,例如更改重量或价格,这也会在所有派生表中自动完成。

有没有最佳实践来做到这一点?

答案1

下面是使用的示例包裹datatool从下面定义的下表中提取数据。要打印的行 ID 列表在以下调用中指定:

\PrintDTLTable{myDB}{Hammer001,Hammer003,Longsword003}

得出下表:

在此处输入图片描述

笔记:

  • 第一列(RowID)必须是唯一的,并且不能是彼此的子集。因此,如果您有一个RowID=foo和另一个RowID=foobar,则定位请求RowID=foo也会匹配RowID=foobar
  • 我将分隔符改为逗号,但如果您想将其保留为&,则只需取消注释该\DTLsetseparator行。

代码:

\documentclass{article}
\usepackage{datatool}

\usepackage{filecontents}
\begin{filecontents*}{foo.dat}
Hammer001,   Hammer,    1 ,  0 , 1 , 10 , 1 , light\\
Hammer002,   Hammer,    2 ,  0 , 1 , 10 , 1 , heavy\\
Hammer003,   Hammer,    3 ,  0 , 1 , 10 , 1 , realy heavy\\
Longsword001,Longsword, 1 , -1 , 2 , 75 , 2 , one-handed \\
Longsword002,Longsword, 2 , -1 , 2 , 75 , 2 , two-handed \\
Longsword003,Longsword, 3 , -1 , 2 , 75 , 2 , three-handed \\
\end{filecontents*}

\newcommand{\PrintDTLTable}[2]{%
    % #1 = database to search
    % #2 = list of rowIDs
    \begin{tabular}{c c c c c c p{3.0cm}}
        Label & Cost & Weight & PropA & PropB & PropC & Description\\\hline
    \DTLforeach[\DTLisSubString{#2}{\RowID}]{#1}{%
        \RowID=RowID,%
        \Label=Label,%
        \Cost=Cost,%
        \Weight=Weight,%
        \PropA=PropA,%
        \PropB=PropB,%
        \PropC=PropC,%
        \Description=Description%
        }{%
        \Label & \Cost & \Weight & \PropA & \PropB & \PropC & \Description
    }%
    \end{tabular}
}%

\begin{document}
%\DTLsetseparator{&}% Define separator of the data
\DTLloaddb[noheader,keys={RowID,Label,Cost,Weight,PropA,PropB,PropC,Description}]{myDB}{foo.dat}

%\DTLdisplaydb{myDB}% Usefule for debugging.

\PrintDTLTable{myDB}{Hammer001,Hammer003,Longsword003}
\end{document}

相关内容