带有 pgfplots 的非倾斜(siunitx 样式)单位前缀

带有 pgfplots 的非倾斜(siunitx 样式)单位前缀

pgfplots我从手册中取出示例Preset SI prefixes并稍加修改,将前缀从 更改millimicro

结果是 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

相关内容