![读取 .txt 数据库(使用 datatool 包)并使用 siunitx 包格式化数字](https://linux22.com/image/453769/%E8%AF%BB%E5%8F%96%20.txt%20%E6%95%B0%E6%8D%AE%E5%BA%93%EF%BC%88%E4%BD%BF%E7%94%A8%20datatool%20%E5%8C%85%EF%BC%89%E5%B9%B6%E4%BD%BF%E7%94%A8%20siunitx%20%E5%8C%85%E6%A0%BC%E5%BC%8F%E5%8C%96%E6%95%B0%E5%AD%97.png)
我有一个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}
结果: