pgfplots
我从手册中取出示例Preset SI prefixes
并稍加修改,将前缀从 更改milli
为micro
。
结果是 yaxis 的单位表示为微牛顿、a\mu
和大写 N。\mu
这里的 是倾斜的,这让我感到不安和惊讶。该siunitx
包(我在其他地方都使用它)会将单位设置为直立的\mu
。这也是我希望在这里发生的事情。
以下是该示例文档的效果图:
\documentclass[preview]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{units}
\pgfplotsset{width=7cm,compat=1.11}
\usepackage{siunitx}
\begin{document}
\begin{tikzpicture}
\begin{axis}[change x base,
x SI prefix=kilo,x unit=m,
y SI prefix=micro,y unit=N,
xlabel=Distance,ylabel=Force (\si{\micro\newton})]
\addplot coordinates {
(1000,1)
(2000,1.1)
(3000,1.2)
(4000,1.3)
};
\end{axis}
\end{tikzpicture}
\end{document}
我以为我找到了解决办法,然后我看到了
\pgfplotsset{unit code/.code 2 args={\si{#1#2}}}
在pgfplots
手册中,但这没有帮助,因为micro
传递给的siunitx
是\mu
而不是\micro
。
答案1
我认为这是 中的一个错误tikzlibrarypgfplots.units.code.tex
。查看第 109-180 行,其中定义了前缀。您将发现(micro
仅适用于):
/pgfplots/x SI prefix/micro/.style={/pgfplots/axis base prefix={axis x base 6 prefix \mu}},%
/pgfplots/y SI prefix/micro/.style={/pgfplots/axis base prefix={axis y base 6 prefix \mu}},%
/pgfplots/z SI prefix/micro/.style={/pgfplots/axis base prefix={axis z base 6 prefix \mu}},%
这就是导致\mu
即使使用
\pgfplotsset{unit code/.code 2 args={\si{#1#2}}}
正如您所提到的。我不确定在一般情况下(用户不能保证使用siunitx
)解决这个问题的最佳方法,但这里有一个适合您情况的解决方法:
\documentclass[preview]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{units}
\pgfplotsset{width=7cm,compat=1.11}
\pgfplotsset{
x SI prefix/micro/.style={/pgfplots/axis base prefix={axis x base 6 prefix \micro}},
y SI prefix/micro/.style={/pgfplots/axis base prefix={axis y base 6 prefix \micro}},
z SI prefix/micro/.style={/pgfplots/axis base prefix={axis z base 6 prefix \micro}},
unit code/.code 2 args={\si{#1#2}},
}
\usepackage{siunitx}
\begin{document}
\begin{tikzpicture}
\begin{axis}[change x base,
x SI prefix=kilo,x unit=\metre,
y SI prefix=micro,y unit=\newton,
xlabel=Distance,ylabel=Force (\si{\micro\newton})]
\addplot coordinates {
(1000,1)
(2000,1.1)
(3000,1.2)
(4000,1.3)
};
\end{axis}
\end{tikzpicture}
\end{document}
更详细的讨论
其余前缀siunitx
行在使用时也存在一些问题。下面是一个典型的例子:
/pgfplots/x SI prefix/yocto/.style={/pgfplots/axis base prefix={axis x base 24 prefix y}},%
这不符合siunitx
使用文字前缀作为 的惯例csname
。如果我们这样做,典型的行将如下所示:
/pgfplots/x SI prefix/yocto/.style={/pgfplots/axis base prefix={axis x base 24 prefix \yocto}},%
但当然,这只适用于
\pgfplotsset{unit code/.code 2 args={\si{#1#2}}}
就像我上面的解决方法一样。理想的解决方案将涉及对代码进行重大修改,但也许siunitx
可以考虑一种选择(啊啦 circuitikz
),它将所有前缀重置为文字前缀csname
,并自动设置unit code
以供使用siunitx
。
要修复siunitx
不使用时的问题,还需要进行更多修改,因为 的默认设置完全处于数学模式。即使可以使用直立希腊字母,也不允许unit code
将其用作键的一部分,因为此时我们未处于文本模式。axis base prefix