我对 LaTeX 领域还很陌生,所以...,事实上,我不确定 DTLtool 是否最适合我的目的。我想在用于文档中所有表格的表格环境中使用 .csv 中的数据。我希望整个内容尽可能通用,因为文档(数据用户手册)需要不时重新编译(每当需要记录新的调查数据发布时,可能会有不同的计数、新文件等)。一般来说,变化不会很大,但(例如)会更改来自该 .csv 的(字符串和数字)值。我想尽量减少错误(例如手动复制/粘贴)。因此,我假设,我不知道当前 .csv 中包含的任何数据(但我可以打开它。)。我只知道,它有两列,需要将每个文件(sourceSUFfile)的值(sourcecount)放入提到的表中。
翻译成我猜测的代码可能是——并且早在\DTLforeach*
失败时(“密钥选项中无法识别的密钥”):
% set document class
\documentclass{article}
% load packages
\usepackage{caption} %% for captions outside of floats
\usepackage{datatool}
\usepackage{filecontents}
\usepackage{pgffor} % for use of \foreach
% create database
\begin{filecontents*}{sourceSUFfiles.csv}
sourceSUFfile,sourcecount
SC1CohortProfile,2
SC1pParent,818
SC1xDirectMeasures,262
SC1xTargetCompetencies,5
SC2CohortProfile,2
SC2pParent,784
SC2pParentCORONA,6
SC2pTarget,326
SC2xTargetCompetencies,110
\end{filecontents*}
% load database and create macros
\DTLloaddb{dbsource}{sourceSUFfiles.csv}
\newcommand{\rows}{\DTLrowcount}
\DTLforeach*{dbsource}{ %
\newcommand{\currentrow}{\dtlrownum}
\newcommand{\file\currentrow}{sourceSUFfile}
\newcommand{\sourcecount\currentrow}{sourcecount}
}
% start document (content)
\begin{document}
% put data into table with predefined format (specialTable)
\begingroup
%\renewcommand{\arraystretch}{1.2}
\begin{table}
% \captionabove{data source files variables are selected from \label{tab:Sourcefiles}}
\begin{tabular}{lr} %
%\nth{Filename} & \nth{Number of variables selected} \\
%\addlinespace
\foreach \n in {2-\rows} { % iterate through values 2 upto the number of rows (*not* counting the first [header row])
\file\n & \sourcecount\n % fill in filename of sourcefile and count of variables of that file
}
\end{tabular}
\end{table}
\endgroup
\end{document}
总结一下:我想将此 .csv 打印到我的文档中,而无需(像在黑框中一样)提前知道行数甚至文件名和计数。实现此目的的最佳方法是什么?
这些键有什么问题(代码中甚至没有提到)?非常感谢任何有关这方面的提示!
答案1
这个简单的模板适用于两列表格。您可以将标题存储在命令中,并在需要时插入。
请注意,数据库的标题不是行的一部分。如果您只想显示行,请删除该行\bfseries Source SUF file & \bfseries Source count
。
\begin{filecontents*}[overwrite]
如果数据会改变则使用。\usepackage{filecontents}
不再需要。
% set document class
\documentclass{article}
% load packages
\usepackage{caption} %% for captions outside of floats
\usepackage{datatool}
% create database
\begin{filecontents*}[overwrite]{sourceSUFfiles.csv}
sourceSUFfile,sourcecount
SC1CohortProfile,2
SC1pParent,818
SC1xDirectMeasures,262
SC1xTargetCompetencies,5
SC2CohortProfile,2
SC2pParent,784
SC2pParentCORONA,6
SC2pTarget,326
SC2xTargetCompetencies,110
\end{filecontents*}
\newcommand{\LeftHeader}{sourceSUFfile}% store the headers of the db
\newcommand{\RightHeader}{sourcecount}
\begin{document}
\DTLloaddb{dbsource}{sourceSUFfiles.csv}
% \DTLdisplaydb{dbsource} %^ to check the database loaded OK
\begin{table}[htbp]
\caption{data source files variables are selected from \label{tab:Sourcefiles}}
\centering
\begin{tabular}{lc}
\bfseries Source SUF file & \bfseries Source count
\DTLforeach{dbsource}{%
\LeftCol=\LeftHeader,\RigthCol=\RightHeader}{%
\\% new row
\LeftCol & \RigthCol }
\end{tabular}
\end{table}
\end{document}