![使用 siunitx 表示具有指数的复数(解决方法)?](https://linux22.com/image/258780/%E4%BD%BF%E7%94%A8%20siunitx%20%E8%A1%A8%E7%A4%BA%E5%85%B7%E6%9C%89%E6%8C%87%E6%95%B0%E7%9A%84%E5%A4%8D%E6%95%B0%EF%BC%88%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95%EF%BC%89%EF%BC%9F.png)
看起来siunitx
(由@Joseph Wright 撰写)对于具有指数的复数有一个限制:
\documentclass[]{article}
\usepackage[]{siunitx}
\begin{document}
\num{1 + 2 i}\\ %ok, complex number
\num{2e6}\\ %ok, number with exponent
\num{1 + 2e6 i}\\ %not ok, ! siunitx error: "invalid-token-in-exponent"
\end{document}
有办法解决这个问题吗?
我发现的唯一方法是
\num[parse-numbers=false]{1 + (\num[parse-numbers=true]{2e6}) i}
这违背了目的。
(我使用的是siunitx
2.5c 版本。)
请注意,siunitx
可以处理复数中的指数,但在两部分的指数相同的情况下,例如\num{1+2i e10}
,情况就不同。
答案1
中的数字解析器siunitx
旨在支持该包的主要目的:排版物理量(带单位的数字)。这些物理量很少有复数部分,如果有复数部分(例如在电子学的某些部分),实数部分和复数部分的量级通常相似。因此,该包理解
1 + 2i e3
作为
$(1 + 2\mathrm{i}) \times 10^{3}$
因为这是迄今为止最常见的要求。
原则上,解析器可以扩展以处理更广泛的输入,但这也需要改变输出的生成方式。这样,在代码复杂性和性能方面就会取得平衡,因为“常见情况”不需要这些。
我们随时欢迎您提出功能请求:请随时在追踪器,以及任何有用的输入语法的链接!