前言:
绘制轴pgf图通常使用当前数学字体作为其刻度标签。但如果它们被覆盖,xticklabels={-8,-6,...,8}
则使用当前文本字体。此外,ylabel={Y}
除非明确置于数学模式中,否则轴标签将采用文本字体ylabel={$Y$}
。但是,如果不这样做,那就太好了。
问题:
我的目标是确保pgfplots 总是使用当前数学字体。但请假设经典字体命令像\rmfamily
被我应该使用的公司设计搞砸了,例如假设:\renewcommand{\rmdefault}{\sfdefault}
如果我明确定义字体,它就会起作用
\newcommand{\pgfmathfont}{\fontfamily{pxfonts}\selectfont}
并将其与以下内容一起传递给 pgfplots assume math mode=true
:
\begin{axis}[
font = \pgfmathfont,
tick label style={/pgf/number format/assume math mode=true}
]
但是它要求我插入当前数学字体的名称。我怎样才能自动完成这一操作?如何获取当前使用的数学字体并将其插入到宏中?
平均能量损失
\documentclass{beamer}
\usetheme{Warsaw}
\usefonttheme{professionalfonts}
\usepackage{pxfonts}
\usepackage{pgfplots}
% screwed up by Corporate Design
\renewcommand{\rmdefault}{\sfdefault}
% I'd like this line to be generic!
\newcommand{\pgfmathfont}{\fontfamily{pxfonts}\selectfont}
% put current math font here X
\begin{document}
\begin{frame}
This is a basic equation:
\[ x + y = 42\]
\begin{tikzpicture}
\begin{axis}[
% font = \rmfamily, % makes no sense here
font = \pgfmathfont,
xlabel={$x$-label: I want to be in math font!},
ylabel={Y},
xtick={-4,-3,...,4},
xticklabels={-8,-6,...,8},
% xticklabels={$-8$,$-6$,...,$8$}, % does not work
tick label style={/pgf/number format/assume math mode=true}
]
\addplot {x^2};
\end{axis}
\end{tikzpicture}
\end{frame}
\end{document}
一切与字体规格根本没有选择!
谢谢你!
答案1
可以使用以下方法根据刻度计算刻度标签
xticklabel={\pgfmathparse{2*\tick}\pgfmathprintnumber{\pgfmathresult}}
但如果你真的想使用,tick label style={/pgf/number format/assume math mode=true}
你必须用 包围\pgfmathprintnumber{}
。$...$
请注意,assume math mode=true
只有当你确定数学模式处于活动状态时才应使用 。来自 pgfmanual:“... 最终数字按原样排版,不进行进一步检查。”
xticklabel={\pgfmathparse{2*\tick}$\pgfmathprintnumber{\pgfmathresult}$},
tick label style={/pgf/number format/assume math mode=true}
\documentclass{beamer}
\usetheme{Warsaw}
\usefonttheme{professionalfonts}
\usepackage{newpxtext,newpxmath}% as suggested by @egreg
\usepackage{pgfplots}
% screwed up by Corporate Design
\renewcommand{\rmdefault}{\sfdefault}
\begin{document}
\begin{frame}
This is a basic equation:
\[ x + y = 42\]
\begin{tikzpicture}
\begin{axis}[
font = \rmfamily,
xlabel={$x$-label: I want to be in math font!},
ylabel={Y},
xtick={-4,-3,...,4},
xticklabel={\pgfmathparse{2*\tick}\pgfmathprintnumber{\pgfmathresult}},
]
\addplot {x^2};
\end{axis}
\end{tikzpicture}
\end{frame}
\end{document}
另一种可能性是
xticklabels={$-8$,$-6$,$...$,$8$}
正如 @percusse 在对你的问题的评论中所建议的那样。请注意,$...$
使用的是。
如果无法根据刻度值计算刻度标签,则可以定义一个数组
\def\myxticklabels{{1.9, 7, 42, 5, 5, 6, 8, 5, 0.720}}
并使用
xticklabel={\pgfmathparse{\myxticklabels[\ticknum]}\pgfmathprintnumber{\pgfmathresult}},
代码:
\documentclass{beamer}
\usetheme{Warsaw}
\usefonttheme{professionalfonts}
\usepackage{newpxtext,newpxmath}% as suggested by @egreg
\usepackage{pgfplots}
% screwed up by Corporate Design
\renewcommand{\rmdefault}{\sfdefault}
\begin{document}
\begin{frame}
This is a basic equation:
\[ x + y = 42\]
\begin{tikzpicture}
\def\myxticklabels{{1.9, 7, 42, 5, 5, 6, 8, 5, 0.720}}
\begin{axis}[
font = \rmfamily,
xlabel={$x$-label: I want to be in math font!},
ylabel={Y},
xtick={-4,-3,...,4},
xticklabel={\pgfmathparse{\myxticklabels[\ticknum]}\pgfmathprintnumber{\pgfmathresult}},
/pgf/number format/use comma
]
\addplot {x^2};
\end{axis}
\end{tikzpicture}
\end{frame}
\end{document}
答案2
定义新样式:
\documentclass{beamer}
\usetheme{Warsaw}
\usefonttheme{professionalfonts}
\usepackage{newpxtext,newpxmath}
\usepackage{pgfplots}
% screwed up by Corporate Design
\renewcommand{\rmdefault}{\sfdefault}
\pgfplotsset{
typeset ticklabels as math/.style={
/pgfplots/typeset ticklabel/.code={$##1$},
},
}
\begin{document}
\begin{frame}
This is a basic equation:
\[ x + y = -8\]
\begin{tikzpicture}
\begin{axis}[
xlabel={$x$-label: I want to be in math font!},
ylabel={Y},
xtick={-4,-3,...,4},
xticklabels={-8,-6,...,8},
typeset ticklabels as math,
tick label style={/pgf/number format/assume math mode=true}
]
\addplot {x^2};
\end{axis}
\end{tikzpicture}
\end{frame}
\end{document}
请注意,应该优先使用newpxtext
的组合,因为它可以解决未维护的旧包的一些缺点。newpxmath
pxfonts