缩放 .pgf 图像但保留字体大小

缩放 .pgf 图像但保留字体大小

使用 Matplotlib,我生成了一个 .pgf 图像。

import matplotlib
matplotlib.rcParams.update({"pgf.texsystem": "pdflatex"})
from matplotlib.pyplot import subplots, show
from numpy import linspace
x = linspace(0, 100, 30)
fig, ax = subplots(figsize = (10, 6))
ax.scatter(x, x)
fig.tight_layout()
fig.savefig('figure.pgf')

生成一个长文件:http://pastebin.com/tjLtTi5Q。我使用以下方式将此图像包含在文档中

    \usepackage{pgf}
    \input{testfig.pgf}

我希望以某种方式缩放它,使字体大小保持不变。最好通过包装某些东西\input{...}而不是更改 pgf 文件,尽管如果这是唯一的方法,后者也是可以接受的。

之前的尝试包括:

  • \begin{pgfpicture}[scale=0.5]成立这里,但规模只存在于tikzpicture
  • 尝试应用 pgfmagnify,我发现这里但无法工作,也找不到太多文档

    \begin{pgfmagnify}{2}{2}
        \begin{pgfpicture}
        ....
    \end{pgfmagnify} 
    
  • 使用\begin{pgfpicture}[width=0.5]哪个也不起作用。

  • 使用上述的 resizebox这里

    \resizebox{0.7\textwidth}{!}{\input{figure.pgf}}
    

这(也许很明显)不会保留字体大小。

编辑:图片使用了 Harish Kumar 评论中的建议:

在此处输入图片描述

该文件的一部分似乎与字体有关:

\pgftext[x=0.501680in,y=2.691389in,right,]{{\sffamily\fontsize{12.000000}{14.400000}\selectfont 40}}%

答案1

例如,您可以使用 k 缩放图形scalebox,并将字体缩放 1/k 来补偿这一点。如果您使用 XeLaTeX 或 LuaLaTeX 进行编译,则可以使用 fontspec 的缩放功能。

这是一个简单的例子:

% to compile with XeLaTeX or LuaLaTeX
\documentclass[varwidth,border=50]{standalone}
\usepackage{fontspec}
\usepackage{pgf}

\begin{document}

% font scale = .25*4 = 1
\setsansfont{Latin Modern Sans}[Scale=.25]%
\scalebox{4}{
  \begin{pgfpicture}
    \pgfsetstrokecolor{red}%
    \pgfpathrectangle{\pgfpointorigin}{\pgfqpoint{5mm}{5mm}}%
    \pgfusepath{draw}%
    \pgftext[x=4,y=4]{{\sffamily\fontsize{12.000000}{14.400000}\selectfont 40}}%
  \end{pgfpicture}
}

% font scale = .5*2 = 1
\setsansfont{Latin Modern Sans}[Scale=.5]%
\scalebox{2}{
  \begin{pgfpicture}
    \pgfsetstrokecolor{red}%
    \pgfpathrectangle{\pgfpointorigin}{\pgfqpoint{5mm}{5mm}}%
    \pgfusepath{draw}%
    \pgftext[x=4,y=4]{{\sffamily\fontsize{12.000000}{14.400000}\selectfont 40}}%
  \end{pgfpicture}
}

\end{document}

在此处输入图片描述

答案2

您可以完全控制axis环境中的绘图尺寸tikzpicture

\begin{tikzpicture}
\begin{axis}[
width=\textwidth,
height=\textwidth
]
...
\end{tikzpicture}

在这里,您可以用任何有效的乳胶尺寸替换 \textwidth,并且无论您将宽度和高度设置为多少,字体大小都会与文档字体匹配。

这将需要编辑 pgf 文件,你说你不想这样做,但我真的认为这是最简单的方法。

我强烈建议你看看matplotlib2tikz,它生成的 pgf 文件比原生 matplotlib pgf 后端更容易使用。

相关内容