有哪些区别,用于包括.csv
文件.tsv
?Datatool?pgfplotstable?
我见过这样的问题:如何从 CSV 文件排版数字表
有人询问如何修复datatool
问题,答案是使用pgfplotstable
还有其他选项可以将表格数据纳入文档吗?
可能的选择的优点和缺点是什么?
答案1
datatool
和都pgfplotstable
可以做类似的事情,但datatool
被设计为更通用的工具,因此原则上可以做更多的事情(例如表格信函等)。因此,如果您的需求只是直接从 CSV 文件打印漂亮的表格,我可能会更喜欢它,pgfplotstables
因为它是专门为此设计的,如果您习惯使用 TiKZ,它具有非常好用的键值语法。如果您需要对 CSV 数据进行更复杂的事情,那么它datatool
可能是一个更好的选择。
答案2
也许您想尝试一下 LuaLaTeX。编写脚本来读取外部文件并格式化 LaTeX 命令非常容易。将 lua 函数写入扩展名为 .lua 的单独文件中是一种很好的做法。对于此 MWE,我使用环境filecontents
来为 lua 脚本和数据文件提供额外的文件。
以下是使用 LuaLaTeX 读取 csv 文件的另一个示例:https://tex.stackexchange.com/a/41499/10570。
\documentclass{book}
\usepackage{filecontents}
%create a datafile
\begin{filecontents*}{datafile.csv}
30.0, 0.0, 0.0
60.0, 1.9098, 5.8779
90.0, 6.9098, 9.5106
120.0, 13.09, 9.5106
150.0, 18.09, 5.8779
180.0, 20.0, 0.0
\end{filecontents*}
%create a lua script file
\begin{filecontents*}{luaFunctions.lua}
function readDataFile()
local input = io.open('datafile.csv', 'r')
dataTable = {} --global table for storing the read values
for line in input:lines() do
--split the line with the comma delimiter
local split = string.explode(line, ",")
--save the arguments in variables
tableItem = {}
tableItem.arg1 = split[1]
tableItem.arg2 = split[2]
tableItem.arg3 = split[3]
--insert the arguments of one line in the table
table.insert(dataTable, tableItem)
end
input:close()
end
function printTable()
tex.print(string.format("\\begin{tabular}{c|c|c}"))
tex.print(string.format("Column 1 & Column 2 & Column 3\\\\\\hline"))
--create a latex string for every table entry
for i,p in ipairs(dataTable) do
tex.print(string.format(" {%s} & {%s} & {%s} \\\\",p.arg1, p.arg2, p.arg3))
end
tex.print(string.format("\\end{tabular}"))
end
\end{filecontents*}
% read the external lua file to declare the defined functions,
% but without execute the Lua commands and functions
\directlua{dofile("luaFunctions.lua")}
% latex commands to execute the lua functions
\def\readDataFile{\directlua{readDataFile()}}
\def\printTable{\directlua{printTable()}}
\begin{document}
\readDataFile
\printTable
\end{document}