![在衬线文档中包含带有无衬线字体的 .pgf 图](https://linux22.com/image/415486/%E5%9C%A8%E8%A1%AC%E7%BA%BF%E6%96%87%E6%A1%A3%E4%B8%AD%E5%8C%85%E5%90%AB%E5%B8%A6%E6%9C%89%E6%97%A0%E8%A1%AC%E7%BA%BF%E5%AD%97%E4%BD%93%E7%9A%84%20.pgf%20%E5%9B%BE.png)
我正在使用创建论文的图表和图形matplotlib
,并将它们保存为.pgf
我使用的文件
\begin{figure}
\input{myfigure.pgf}
\caption{A caption}
\end{figure}
默认情况下,使用与文档中相同的字体排版图形中的所有数学和标签。但我希望我的图表和图形使用无衬线字体,同时使用 palatino 作为主文档字体。
到目前为止,我尝试了以下内容:添加mpl.rcParams["font.family"] = "sans-serif"
到绘图生成代码中以获取以无衬线字体排版的所有非数学文本,并以无衬线字体获取数学运算,我使用的sansmath
包如下:
% preamble
\usepackage{sansmath}
% more preamble
\begin{document}
\begin{figure}
\begin{sansmath}
\input{myfigure.pgf}
\end{sansmath}
\caption{A caption}
\end{figure}
\end{document}
这对于图中的所有标签和数学都很有效除了希腊字母。使用该选项\usepackage[eulergreek]{sansmath}
也无济于事。
有没有人有好的解决方案来包含所有无衬线字体的 pgf 文件?最好是一个不需要更改 matplotlib rcParams 的解决方案,因为我可能想在其他地方以不同的格式重复使用这些图形。
答案1
好的,我找到了一个效果很好的解决方案。基本上,主要问题是数学字体不遵循周围的字体系列。即,段落中用无衬线字体排版的数学不会用无衬线字体排版。因此,需要确保数学也能在无衬线字体系列中正确排版,方法是在序言中添加以下内容:
\DeclareMathVersion{sans}
\SetSymbolFont{operators}{sans}{OT1}{kurierm}{m}{n}
\SetSymbolFont{letters}{sans}{OML}{kurier}{m}{it}
\SetSymbolFont{symbols}{sans}{OMS}{kurier}{m}{n}
\SetMathAlphabet{\mathit}{sans}{OT1}{kurier}{m}{sl}
\SetMathAlphabet{\mathbf}{sans}{OT1}{kurier}{bx}{n}
\SetMathAlphabet{\mathtt}{sans}{OT1}{kurier}{m}{n}
\SetSymbolFont{largesymbols}{sans}{OMX}{kurier}{m}{n}
\DeclareMathVersion{boldsans}
\SetSymbolFont{operators}{boldsans}{OT1}{kurierm}{b}{n}
\SetSymbolFont{letters}{boldsans}{OML}{kurier}{b}{it}
\SetSymbolFont{symbols}{boldsans}{OMS}{kurier}{b}{n}
\SetMathAlphabet{\mathit}{boldsans}{OT1}{kurier}{b}{sl}
\SetMathAlphabet{\mathbf}{boldsans}{OT1}{kurier}{bx}{n}
\SetMathAlphabet{\mathtt}{boldsans}{OT1}{kurier}{b}{n}
\SetSymbolFont{largesymbols}{boldsans}{OMX}{kurier}{bx}{n}
\newif\IfInSansMode
\let\oldsf\sffamily
\renewcommand*{\sffamily}{\oldsf\mathversion{sans}\InSansModetrue}
\let\oldmd\mdseries
\renewcommand*{\mdseries}{\oldmd\IfInSansMode\mathversion{sans}\fi\relax}
\let\oldbf\bfseries
\renewcommand*{\bfseries}{\oldbf\IfInSansMode\mathversion{boldsans}\else%
\mathversion{bold}\fi\relax}
\let\oldnorm\normalfont
\renewcommand*{\normalfont}{\oldnorm\InSansModefalse\mathversion{normal}}
\let\oldrm\rmfamily
\renewcommand*{\rmfamily}{\oldrm\InSansModefalse\mathversion{normal}}
并保持mpl.rcParams["font.family"] = "sans-serif"
使所有情节都无衬线。