![为什么 siunitx 无法将这个混合符号和数字参数排版为 \SI?](https://linux22.com/image/243645/%E4%B8%BA%E4%BB%80%E4%B9%88%20siunitx%20%E6%97%A0%E6%B3%95%E5%B0%86%E8%BF%99%E4%B8%AA%E6%B7%B7%E5%90%88%E7%AC%A6%E5%8F%B7%E5%92%8C%E6%95%B0%E5%AD%97%E5%8F%82%E6%95%B0%E6%8E%92%E7%89%88%E4%B8%BA%20%5CSI%EF%BC%9F.png)
我在 OSX Lion 上使用 MacTeX 2011 发行版(安装了所有更新),我从siunitx
包中收到一个奇怪的错误,而这在 Snow Leopard 上的 MacTex 2010 中并没有发生过。
举一个简单的例子
\documentclass{article}
\usepackage{siunitx}
\sisetup{mode=text,per-mode=symbol,input-symbols={\pi\cdot}}
\begin{document}
\SI{2 \pi \cdot 10}{\kilo\hertz}
\end{document}
将无法排版并出现错误Missing $ inserted.
,而将\SI
命令更改为
\SI{2 \pi \cdot 1}{\kilo\hertz}
将会被排版且没有错误。
有人能解释一下为什么siunitx
无法正确解析第一个命令吗?
答案1
如果强制使用文本模式进行输出,则需要确保为需要它的符号选择数学模式。正如 egreg 指出的那样,一种选择是关闭解析器并允许数字中的任何数学模式材料。另一种方法要求您为每个数学模式符号创建一个合适的包装器:
\documentclass{article}
\usepackage{siunitx}
\sisetup{mode=text,per-mode=symbol,input-symbols=\mypi\mycdot}
\protected\def\mypi{\ensuremath{\pi}}
\protected\def\mycdot{\ensuremath{\cdot}}
\begin{document}
\SI{2 \mypi \mycdot 10}{\kilo\hertz}
\end{document}
答案2
您必须关闭第一个参数中的数字解析:
\SI[parse-numbers=false]{2\pi\cdot10}{\kilo\hertz}
文档第 22 页。