全部。假设我有一个 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}