我想使用 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
宏中。