如何获取当前使用的数学字体?或者:如何确保在 pgfplots 轴标签和刻度中使用数学字体,即使被文本字符串覆盖?

如何获取当前使用的数学字体?或者:如何确保在 pgfplots 轴标签和刻度中使用数学字体,即使被文本字符串覆盖?

前言:

绘制轴通常使用当前数学字体作为其刻度标签。但如果它们被覆盖,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的组合,因为它可以解决未维护的旧包的一些缺点。newpxmathpxfonts

相关内容