\DeclareSiUnit 中的选项问题

\DeclareSiUnit 中的选项问题

我也想知道如何使用siunitx写入100 MBps?,所以\sisetup{per-mode=symbol,per-symbol = p}解决了我的问题,我决定将其用作选项\DeclareSIUnit[per-mode=symbol,per-symbol=p]{\Bps}{\byte\per\second}

这样,我就可以修复\per每个单位的格式,并在同一个文本中获取 Km/s 和 MBps,而无需在每个命令中写入格式\SI。也许这种混合不正确,但这不是我的问题。

但有些东西缺失了,因为当我写入时,\SI{10}{\Bps}我得到了 10 Bps,但 \SI{10}{\mega\Bps}结果却是 10 MB/s。那么,问题出在哪里?

这里有 MWE 和它的结果:

\documentclass[a4paper,12pt]{article}
\usepackage[load-configurations={abbreviations,binary}]{siunitx}
\sisetup{per-mode=symbol}

\DeclareSIUnit[per-mode=symbol,per-symbol=p]{\Bps}{\byte\per\second}

\begin{document}

\SI[per-mode=symbol,per-symbol=p]{1}{\mega\byte\per\second}

\SI{2}{\Bps} 

\SI{3}{\mega\Bps}

\SI[per-mode=symbol,per-symbol=p]{4}{\mega\Bps}

\end{document}

在此处输入图片描述

答案1

这是设计行为。如手册中所述,为某个单元设置的选项适用于该单元仅有的siunitx \mega\Bps,这意味着它们不适用于组合。从和的角度来看,\Bps对于选项的应用是不同的。

曾经有一个强有力的实现原因:在 v1 中,siunitx不同的解析方法用于不同的输出形式,因此无法中途更改。此限制不适用于当前代码。

这种限制的另一个原因是概念上的。问题中要求的方法并非不合理,但其他组合可能不合理。例如,如果您开始将不同的单元与不同的选项组合在一起,那么很难确定“正确”的结果。因此,仅检查“顶级”输入的选项\SI,并且仅当只有一个单元宏而没有其他输入时才检查。

与此同时,对于单位的“捷径”方法只打算在“一个层面”使用,例如

\DeclareSIUnit[per-mode=symbol,per-symbol=p]{\Bps}{\byte\per\second}
\DeclareSIUnit[per-mode=symbol,per-symbol=p]{\MBps}{\mega\byte\per\second}

它确实以更复杂的方式工作,但选项只能在“顶层”读取。

相关内容