![带有限定符的用户定义单位宏在用于小数单位时会中断](https://linux22.com/image/324574/%E5%B8%A6%E6%9C%89%E9%99%90%E5%AE%9A%E7%AC%A6%E7%9A%84%E7%94%A8%E6%88%B7%E5%AE%9A%E4%B9%89%E5%8D%95%E4%BD%8D%E5%AE%8F%E5%9C%A8%E7%94%A8%E4%BA%8E%E5%B0%8F%E6%95%B0%E5%8D%95%E4%BD%8D%E6%97%B6%E4%BC%9A%E4%B8%AD%E6%96%AD.png)
考虑以下带有的 MWE siunitx
:
\documentclass{article}
\usepackage{siunitx}
\sisetup{detect-all}
\DeclareSIQualifier\peak{p}
\DeclareSIUnit\wattp{\watt\peak}
\DeclareSIUnit\usd{USD}
\begin{document}
\SI{41}{\usd/\wattp}
\SI{41}{\wattp}
\SI{41}{\usd \wattp}
\SI{41}{\usd\per\wattp}
\end{document}
结果是这样的:
看来小数表示会破坏用户定义单元宏中限定符的功能。我该如何解决这个问题?
不幸的是,\peak
使用\protect
宏保护限定符(\DeclareSIUnit\wattp{\watt\protect\peak}
) 保护限定符会破坏全部输出:
我希望“W_p”(参见原始输出中的第 2、3 和 4 个示例)也出现在分数单位(第 1 个示例)中。
答案1
你需要保护你的\peak
资格赛。
\documentclass{article}
\usepackage{siunitx}
\sisetup{detect-all}
\DeclareSIQualifier\peak{p}
\DeclareSIUnit\wattp{\watt\protect\peak}
\DeclareSIUnit\usd{USD}
\begin{document}
\SI{41}{\usd/\wattp}
\SI{41}{\wattp}
\SI{41}{\usd \wattp}
\SI{41}{\usd\per\wattp}
\end{document}