列格式数据工具

列格式数据工具

全部。假设我有一个 csv 文件(我们称之为 data.csv):

Solution,mol/L,Volume(mL),delta_v(mL),moles
HNO3,16,5,0.2,3.125E-4
NaOH,6,20.2,0.2,3.367E-3
H2O,1;200,5,2.000E-1
H2SO4,6,5.2;0.2,8.667E-4
HCl,12,10;0.2,8.333E-4

现在,假设我想使用 mhchem 包和 siunitx 包来帮助格式化 data.csv 中的不同列。具体来说,我想将 \ce{} 中第一列的所有内容包装起来(第一行除外)。因此,HNO3 将是 \ce{HNO3},因此会显示下标 3。我想将 \num{} 中摩尔列中的所有内容包装起来。

有谁知道有什么好方法可以做到这一点?

答案1

这是一种可行的方法:

在此处输入图片描述

笔记:

  • 正如 cgnieder 所建议的,需要使用\expandafter\ce\expandafter{\Solution}

代码:

\documentclass{article}
\usepackage{datatool}
\usepackage{siunitx}
\usepackage{mhchem}

\usepackage{filecontents}
\begin{filecontents*}{data.csv}
Solution,mol/L,Volume(mL),delta_v(mL),moles
HNO3,16,5,0.2,3.125E-4
NaOH,6,20.2,0.2,3.367E-3
H2O,1,200,5,2.000E-1
H2SO4,6,5.2,0.2,8.667E-4
HCl,12,10,0.2,8.333E-4
\end{filecontents*}

\newcommand{\PrintDTLTable}[1]{% #1 = database
    \begin{tabular}{c c c c c }% I think you mean \delta
        Solution & mol/L & Volume\,(mL) & $\Delta \textnormal{V}$\,(mL) & moles \\\hline%
    \DTLforeach{#1}{%
        \Solution=Solution,%
        \Mol=Mol,%
        \Volume=Volume,%
        \Delta=Delta,%
        \Moles=Moles%
        }{%
        \expandafter\ce\expandafter{\Solution} & \num{\Mol} & \num{\Volume} & \num{\Delta} & \num{\Moles}\\%
    }%
    \end{tabular}%
}%

\begin{document}
\DTLloaddb[keys={Solution,Mol,Volume,Delta,Moles}]{myDB}{data.csv}

\PrintDTLTable{myDB}
\end{document}

相关内容