在 pgfplots 中使用 sans 字体作为刻度标签

在 pgfplots 中使用 sans 字体作为刻度标签

我使用 sans 字体来绘制图形。因此,我也希望 pgfplots 的刻度标签也使用 sans 字体。但是,刻度标签是在数学环境中设置的。因此,更改文本字体不会改变任何东西。我见过可能的解决方案在 tex.SE 上。问题是收到许多类似这样的错误消息:

! LaTeX Error: Symbol font `um_fam1' not defined.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.23        \end{axis}

我认为问题在于使用了非数学字体unicode-math,这不是预期的用例unicode-math。我确实尝试了很多方法将数学字体更改为 sans,例如这里,但本质上无数学字体是不可能的。

由于无法使用 sans math 字体,也许可以将 pgfplots 更改为使用非数学环境。我在这里问,是否可以修补以使用pgfplots非数学环境作为刻度标签?我知道分数或某些对数刻度需要这种环境。但我实际上并不使用它们。所以我可以接受忽略这些情况的解决方案。唯一重要的字符是数字和逗号。

% !TeX program = lualatex
\documentclass{article}

\usepackage{siunitx}
\sisetup{locale = DE}

\usepackage{unicode-math}
\setmainfont[Ligatures=TeX, Numbers=OldStyle]{TeX Gyre Pagella}
\setmathfont{TeX Gyre Pagella Math}
% In reality I do not use Adventor but another sans font
\setsansfont{TeX Gyre Adventor}

\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\SendSettingsToPgf

\begin{document}
    \begin{tikzpicture}[font=\sffamily]
        \begin{axis}[xlabel=x direction, ylabel=y direction, xmin=-1, xmax=1,domain=-1:1]
            \addplot {x^2};
        \end{axis}
    \end{tikzpicture}

    \textsf{1,2,3,4,5,6,7,8,9,0}
\end{document}

在此处输入图片描述


答案1

这可以通过在键中设置来实现tick label style。默认情况下(不涉及太多细节),pgf/在排版刻度标签时内部pgfplots使用一些“类似”的业务。我们可以通过设置来禁用此功能。这告诉假设输入是\ensuremathtick label style={/pgf/number format/assume math mode=true}pgf已经在数学模式下(尽管在本例中不是),并且\ensuremath不需要“-like”函数。因此数字直接传入并按指定的格式排版\sffamily

代码

% !TeX program = lualatex
\documentclass{article}

\usepackage{siunitx}
\sisetup{locale = DE}

\usepackage{unicode-math}
\setmainfont[Ligatures=TeX, Numbers=OldStyle]{TeX Gyre Pagella}
\setmathfont{TeX Gyre Pagella Math}
% In reality I do not use Adventor but another sans font
\setsansfont{TeX Gyre Adventor}

\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\SendSettingsToPgf

\begin{document}
\begin{tikzpicture}[font=\sffamily]
\begin{axis}[%
  xlabel=x direction,
  ylabel=y direction,
  xmin=-1, xmax=1,
  domain=-1:1,
  tick label style={/pgf/number format/assume math mode=true} % <=== added here
]
  \addplot {x^2};
\end{axis}
\end{tikzpicture}

\textsf{1,2,3,4,5,6,7,8,9,0}
\end{document}

输出

在此处输入图片描述

答案2

Paul Gessler 的解决方案非常有效。唯一的缺陷是减号太小。实际上它是一个连字符。我找到了一种绕过这个问题的方法,即使用包\num的命令siunitx

% !TeX program = lualatex
\documentclass{article}

\usepackage{siunitx}
\sisetup{locale = DE}

\usepackage{unicode-math}
\setmainfont[Ligatures=TeX, Numbers=OldStyle]{TeX Gyre Pagella}
\setmathfont{TeX Gyre Pagella Math}
% In reality I do not use Adventor but another sans font
\setsansfont{TeX Gyre Adventor}

\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\SendSettingsToPgf

% The following command will print the tick label with siunitx's \num{}
\def\myprinttick{ %
    \bgroup %
        \pgfmathprintnumberto{\tick}{\retval}%
        \num{\retval}%
    \egroup %
}

\begin{document}
    \begin{tikzpicture}[font=\sffamily\sisetup{mode=text,text-rm=\sffamily}] % <- changed
        \begin{axis}[xlabel=x direction, ylabel=y direction, xmin=-1, xmax=1, 
        domain=-1:1,
        tick label style={/pgf/number format/assume math mode=true}, % from Paul Gessler
        xticklabel={\myprinttick}, % <- added
        yticklabel={\myprinttick} % <- added
        ]
            \addplot {x^2};
        \end{axis}
    \end{tikzpicture}

    \textsf{1,2,3,4,5,6,7,8,9,0}
\end{document}

在此处输入图片描述

相关内容