我想使用 来格式化我的轴标签\num
,但如果我在里面使用 ,typeset ticklabel
编译\num
就会卡住。请看这个最小示例:
\documentclass[tikz,margin=1cm]{standalone}
\usepackage{pgfplots,siunitx}
\pgfplotsset{compat=1.17}
\def\mynum#1{(#1)}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
typeset ticklabel/.code = { \mynum{#1} },
% typeset ticklabel/.code = { \num{#1} },
]
\addplot [red] plot [domain=-1:1] {x^2};
\end{axis}
\end{tikzpicture}
\end{document}
使用\mynum
进行任意格式化可以正常工作,但使用siunitx
则\num
卡住。这是什么问题?
答案1
typeset ticklabel
手册中未记录该密钥pgfplots
(2020/02/29 修订版 1.17)。根据懒惰松鼠的评论,它仅供内部使用。因此,如果您不具备某些pgfplots
内部知识,您真的不能指望它能带来任何好处。
一种有记录且有效的方法是使用xticklabel
和yticklabel
样式(请参阅刻度坐标和标签文本在手册中)。例如,在下面的例子中,我们要求siunitx
在刻度标签中使用逗号作为小数分隔符,并省略小数部分的尾随零:
\documentclass[tikz,margin=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.17}
\usepackage{siunitx}
\sisetup{output-decimal-marker={,}, zero-decimal-to-integer}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xticklabel = {$\num{\tick}$},
yticklabel = {$\num{\tick}$},
]
\addplot [red] plot [domain=-1:1] {x^2};
\end{axis}
\end{tikzpicture}
\end{document}
当然,siunitx
设置可以在本地完成,如下所示:
\begin{tikzpicture}
\sisetup{output-decimal-marker={,}, zero-decimal-to-integer}
\begin{axis}[
xticklabel = {$\num{\tick}$},
yticklabel = {$\num{\tick}$},
]
\addplot [red] plot [domain=-1:1] {x^2};
\end{axis}
\end{tikzpicture}
(在这种情况下它不会影响 之外的任何内容tikzpicture
),甚至不会影响 的可选参数\num
:
xticklabel = {%
$\num[output-decimal-marker={,},
zero-decimal-to-integer]{\tick}$%
}