pgfplotstable 还是 datatool?

pgfplotstable 还是 datatool?

有哪些区别,用于包括.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}

相关内容