我想编写一个结合\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