使用 pythontex 将单元宏传递给 siunitx

使用 pythontex 将单元宏传递给 siunitx

我想编写一个结合\pythontex\siunitx包的宏。更准确地说,我想在 python 中使用(复数)数字进行计算,然后将结果排版为\SI{number from python}{unit}

我定义了一个宏\pySIC,它(或多或少)可以实现这个技巧。但是,当我尝试传递unit宏(例如\ampere\ohm...)作为第二个参数时,我注意到了奇怪的行为。

而不是\ampere我必须通过\\ampere,而通过\ohm是可以的。为什么在 的情况下要使用双反斜杠\\ampere

\documentclass{article}
\usepackage{etoolbox}
\usepackage{xparse}
\usepackage{siunitx}
\usepackage{pythontex}


\begin{pythontexcustomcode}{py}
    from scipy import *
\end{pythontexcustomcode}

\DeclareDocumentCommand{\pySIC}{ m m O{}}
{%
\py{'\\SI[#3]{' + str(#1).replace('(','').replace(')','') + '}{#2}'}%
}

\begin{document}
 % defining complex number
    \pyc{Z = 1 + 1j}
    \pySIC{Z}{\\ampere}     \par
    \pySIC{Z}{\ohm}
\end{document}

答案1

在命令定义中,您需要r'}{#2}'。您需要一个原始的、未转义的字符串。

事实上,单位宏名称被传递给 Python,然后反斜杠在 Python 字符串中被视为转义符。\a变成\x07,而转义后\o变成。\\o

相关内容