读取 .txt 数据库(使用 datatool 包)并使用 siunitx 包格式化数字

读取 .txt 数据库(使用 datatool 包)并使用 siunitx 包格式化数字

我有一个variables.txt包含以下内容的文件:

comp,232.429342
iva,1.9584000000000001

这些是从main.py文件导入的变量。使用该datatool包,我制作了一个宏来读取数据库,如下所示:

\DTLsetseparator{,}
\DTLloaddb[noheader, keys={thekey,thevalue}]{python_variables}{variables.txt}
\newcommand{\pythonVar}[1]{\DTLfetch{python_variables}{thekey}{#1}{thevalue}}

因此,当我想要显示变量的内容时,iva我使用下一个命令:

\pythonVar{iva}

并且它有效。

但是当我使用该siunitx包正确格式化数字时,会出现错误,例如:

\qty{\pythonVar{iva}}{\ampere}

完整LaTeX代码如下:

\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{datatool}
\DTLsetseparator{,}
\DTLloaddb[noheader, keys={thekey,thevalue}]{python_variables}{variables.txt}
\newcommand{\pythonVar}[1]{\DTLfetch{python_variables}{thekey}{#1}{thevalue}}
\usepackage{siunitx}
\begin{document}
        Python variable: \pythonVar{iva}
        
        With unit: \qty{\pythonVar{iva}}{\ampere}
        
        Without unit: \num{\pythonVar{iva}}
\end{document}

这有助于我获得一个动态LaTeX文档。

答案1

\DTLfetch命令旨在“获取并显示”一个值。但是,在这里您不想显示该值,而是想通过 使用它进行进一步处理siunitx。为此,您可以使用\DTLgetvalueforkey将值存储在临时变量中,并使用此变量进行进一步处理。

为此,您可以定义辅助宏,首先存储该值,然后立即在或中使用\qty\num

梅威瑟:

\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{siunitx}
\usepackage{datatool}
\DTLsetseparator{,}
\DTLloaddb[noheader, keys={thekey,thevalue}]{python_variables}{variables.txt}
\newcommand{\pythonVar}[1]{\DTLfetch{python_variables}{thekey}{#1}{thevalue}}

\newcommand{\unitPythonVar}[2]{%
\DTLgetvalueforkey{\sitemp}{thevalue}{python_variables}{thekey}{#1}%
\qty{\sitemp}{#2}}

\newcommand{\noUnitPythonVar}[1]{%
\DTLgetvalueforkey{\sitemp}{thevalue}{python_variables}{thekey}{#1}%
\num{\sitemp}}

\begin{document}
        Python variable: \pythonVar{iva}
        
        With unit: \unitPythonVar{iva}{\ampere}
        
        Without unit: \noUnitPythonVar{iva}
\end{document}

结果:

在此处输入图片描述

相关内容