我使用 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
使用一些“类似”的业务。我们可以通过设置来禁用此功能。这告诉假设输入是\ensuremath
tick 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}