以下示例代码略微改编自Peter Grill 对“包含主表行的表”的回答。
我遇到的问题是,如果我有多行,那么我需要在其后立即添加一个额外的空白行。如果我选择任意行子集,则很难自动完成此操作。我以为我可以在行&&&&&&&\\
末尾将空白行(类似于)添加到 csv 文件中multirow
,但datatool
我不喜欢这样。还有其他想法吗?
\documentclass{article}
\usepackage{array}
\usepackage{multirow}
\usepackage{datatool}
\usepackage{filecontents}
\newcommand{\colhead}[1]{\multicolumn{1}{>{\bfseries}l}{#1}}
\newcounter{tabenum}\setcounter{tabenum}{0}
\newcommand{\nextnuml}[1]{\refstepcounter{tabenum}\thetabenum.\label{#1}}
\begin{filecontents*}{foo.dat}
Hammer001, Hammer, 1 , 0 , 1 , 10 , 1 , \multirow{2}{2in}{light (add some words here to wrap around)}\\
Hammer002, Hammer, 2 , 0 , 1 , 10 , 1 , heavy\\
Hammer003, Hammer, 3 , 0 , 1 , 10 , 1 , really 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 c p{3.0cm}}
& \colhead{Label} & \colhead{Cost} & \colhead{Weight} & \colhead{PropA} & \colhead{PropB} & \colhead{PropC} & \colhead{Description}\\\hline
\DTLforeach[\DTLisSubString{#2}{\RowID}]{#1}{%
\RowID=RowID,%
\Label=Label,%
\Cost=Cost,%
\Weight=Weight,%
\PropA=PropA,%
\PropB=PropB,%
\PropC=PropC,%
\Description=Description%
}{%
\nextnuml{\RowID} & \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}
This is a reference to ~\ref{Hammer003}.
\end{document}
答案1
实际上,下面的代码似乎可行。定义
\newcommand{\foo}{&&&&&&&}
然后将其添加\foo
到多行行尾。因此,只要包含多行行,就会包含额外的空白行。有人发现这有问题吗?如果您想到更好、更优雅的方法,请发帖。出于某种原因,直接添加&&&&&&&
到 csv 文件会出现错误;我不确定为什么。由于我不太了解 datatool 的工作原理,因此如果能给出解释,我将不胜感激。
Hammer001, Hammer, 1 , 0 , 1 , 10 , 1 , \multirow{2}{2in}{light (add some words here to wrap around)}\\ \foo \\
附录:实际上,它甚至更简单。\foo
不需要。只需执行即可。
Hammer001, Hammer, 1 , 0 , 1 , 10 , 1 , \multirow{2}{2in}{light (add some words here to wrap around)}\\ \\