pgfplots - 使用 siunitx 的 x 单位

pgfplots - 使用 siunitx 的 x 单位

我想使用 x unit=something 将单位绘制到轴上。在手册中,我发现使用 siunitx 可以做到这一点:

\pgfplotsset{
  unit code/.code 2 args={\si{#1#2}}
}  

现在我制作一个情节:

\begin{axis}[
    xlabel = \(E\),
    x unit={\mega\electronvolt.m}
  ]  

点被写出来了,但不应该这样。手动操作可以实现:

\begin{axis}[
    xlabel = \(E\),
    x unit=\si{\mega\electronvolt.m}
]  

我究竟做错了什么?

答案1

问题是pgfplots传递单元时会“包装”在某些代码中。为了在这里正确地将其取出,我们必须采取措施对其进行扩展。

\documentclass{standalone}
\usepackage{pgfplots,siunitx}
\usepgfplotslibrary{units}
\makeatletter
\pgfplotsset{
  unit code/.code 2 args=
    \begingroup
    \protected@edef\x{\endgroup\si{#2}}\x
} 
\makeatother 
\begin{document}
\begin{tikzpicture}

\begin{axis}[
  xlabel = \(E\),
  x unit=\mega\electronvolt.m]
\addplot {x^2};
\end{axis}

\end{tikzpicture}
\end{document}

您可以做同样的事情,\expandafter但是您需要很多!

\documentclass{standalone}
\usepackage{pgfplots,siunitx}
\usepgfplotslibrary{units}
\pgfplotsset{
  unit code/.code 2 args=
    \expandafter\expandafter\expandafter\expandafter
      \expandafter\expandafter\expandafter\si
        \expandafter\expandafter\expandafter\expandafter
          \expandafter\expandafter\expandafter{#2}%
} 

\begin{document}
\begin{tikzpicture}

\begin{axis}[
  xlabel = \(E\),
  x unit=\mega\electronvolt.m]
\addplot {x^2};
\end{axis}

\end{tikzpicture}
\end{document}

您必须强制扩展的原因是,与数字不同,siunitx它不会尝试扩展单位:它希望单位“按原样”给出。因此,搜索和替换会.失败,因为它“隐藏”在pgfplots宏中。

相关内容