sansmath 功能与 fontspec

sansmath 功能与 fontspec

我总是用无衬线字体排版条形图(使用pgfplots使用数学模式进行pgfplots标记的包)。由于我使用的是 LuaTeX,因此遇到了问题(另请参阅无衬线字体的条形图我在其中描述了同样的问题)。使用 PDFTeXsansmath包和 @sebschub 的 MyriadPro 文件解决了这个问题。但我无法使用 实现这些功能fontspec。如何pgfplots使用 LuaTeX/ 排版条形图fontspec

下面是使用我使用的字体(Adobe Reader 附带的 MinionPro 和 MyriadPro)的 MWE:

\documentclass{scrartcl}
\usepackage{%
  sansmath%
} 
\usepackage{fontspec}
\setmainfont[%
  BoldFont={MinionPro-Bold}%
  ,ItalicFont={MinionPro-It}%
  ,BoldItalicFont={MinionPro-BoldIt}%
  ,Numbers=OldStyle%
]{MinionPro-Regular}

\setsansfont[%
  Scale=MatchLowercase%
  ,BoldFont={MyriadPro-Bold}%
  ,ItalicFont={MyriadPro-It}%
  ,BoldItalicFont={MyriadPro-BoldIt}%
  ,Numbers=OldStyle%
]{MyriadPro-Regular}
\setmathsf{MyriadPro-Regular}
\usepackage{pgfplots}
\pgfplotsset{%
  /tikz/font=\sansmath\sffamily
}
\usepackage{filecontents}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
  xbar,
  xlabel={a--d},
  symbolic y coords={a,b,c,d},
  ytick=data,
  nodes near coords, nodes near coords align={horizontal},
  ]
  \addplot coordinates {
    (45,a)
    (20,b)
    (1,c)
    (5,d)
    };
\end{axis}
\end{tikzpicture}
\end{document}

这是相应的情节(我不想要斜体字体):

斜体无衬线字体的条形图

pgfplotsset以下是我已经尝试过(并记下来)的一些选项:

\pgfplotsset{%
%  ,tick label style = {font=\sansmath\sffamily}%
%  ,tick style = {font=\sansmath\sffamily}
%  ,every axis label = {font=\sansmath\sffamily}%
%  ,every axis/.style={font=\sansmath\sffamily}%
%  ,xticklabel={$\pgfmathprintnumber{\sansmath\tick}$}%
  ,/tikz/font=\sansmath\sffamily
%  ,legend style = {font=\sansmath\sffamily}%
%  ,label style = {font=\sansmath\sffamily}%
}

如果你知道一个更好的地方来问这个问题,请告诉我。TIA

答案1

这是一个不使用包的解决方案sansmath

\documentclass{scrartcl}
\usepackage{unicode-math}
\setmainfont[%
  BoldFont={MinionPro-Bold}%
  ,ItalicFont={MinionPro-It}%
  ,BoldItalicFont={MinionPro-BoldIt}%
  ,Numbers=OldStyle%
]{MinionPro-Regular}
\setsansfont[%
  Scale=MatchLowercase%
  ,BoldFont={MyriadPro-Bold}%
  ,ItalicFont={MyriadPro-It}%
  ,BoldItalicFont={MyriadPro-BoldIt}%
  ,Numbers=OldStyle%
]{MyriadPro-Regular}  
\setmathfont{MyriadPro-Regular}
\usepackage{pgfplots}
\usepackage{filecontents}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
  xbar,
  xlabel={a--d},
  symbolic y coords={a,b,c,d},
  ytick=data,
  nodes near coords, nodes near coords align={horizontal},
  ]
  \addplot coordinates {
    (45,a)
    (20,b)
    (1,c)
    (5,d)
    };
\end{axis}
\end{tikzpicture}
\end{document}

答案2

如果sansmath您需要的只是用无衬线字体打印数字而不是一般的数学表达式,那么可以使用以下技巧:

\documentclass{scrartcl}

\usepackage{fontspec}
\setmainfont[Ligatures=TeX,
  Numbers=OldStyle,
]{Minion Pro}

\setsansfont[Ligatures=TeX,
  Scale=MatchLowercase,
]{Myriad Pro}
\usepackage{pgfplots}
\pgfplotsset{%
  /tikz/font=\plotsf
}

\newfam\plotsffam
\newcommand\plotsf{%
  \sffamily
  \everymath{%
    \textfont\plotsffam=\usesf
    \mathcode`0=\numexpr 256*\plotsffam+`0\relax
    \mathcode`1=\numexpr 256*\plotsffam+`1\relax
    \mathcode`2=\numexpr 256*\plotsffam+`2\relax
    \mathcode`3=\numexpr 256*\plotsffam+`3\relax
    \mathcode`4=\numexpr 256*\plotsffam+`4\relax
    \mathcode`5=\numexpr 256*\plotsffam+`5\relax
    \mathcode`6=\numexpr 256*\plotsffam+`6\relax
    \mathcode`7=\numexpr 256*\plotsffam+`7\relax
    \mathcode`8=\numexpr 256*\plotsffam+`8\relax
    \mathcode`9=\numexpr 256*\plotsffam+`9\relax
  }%
}
\AtBeginDocument{{\sffamily\xdef\usesf{\the\font}}}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
  xbar,
  xlabel={a--d},
  symbolic y coords={a,b,c,d},
  ytick=data,
  nodes near coords, nodes near coords align={horizontal},
  ]
  \addplot coordinates {
    (45,a)
    (20,b)
    (1,c)
    (5,d)
    };
\end{axis}
\end{tikzpicture}
\end{document}

这个想法是改变数字的数学代码来选择正确的字体。

在此处输入图片描述

相关内容