我总是用无衬线字体排版条形图(使用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}
这个想法是改变数字的数学代码来选择正确的字体。