配置 \includegraphics 以加载和缩放 .pgf

配置 \includegraphics 以加载和缩放 .pgf

我一直将在 matplotlib 中生成的图形保存为 .png、.pdf 和 .tikz 格式,这样可以使用 \includegraphics 轻松地将其包含在文档中。

matplotlib 还可以选择生成较低级别的 .pgf 代码。如果能够使用 \includegraphics 输入 .pgf 代码文件就更好了。文件似乎已被读取,但输出被截断了。

注意 img.pgf 中的环境是 tikzpicture,我把 matplotlib 生成的环境从 pgfpicture 改成了 tikzpicture,使用原来的 pgfpicture 会导致 tikzscale 报错“Requested to scale unscaleable graphic”

编辑:抱歉,问题表述不当。下面是 MWE,上面已重新表述。

主文本

\documentclass{article}
\usepackage{graphicx}   %
\usepackage{tikzscale}  %Allows \includegraphics to parse .tikz files and scales according to width
\usepackage{pgf}
\usepackage{tikz}
\usepackage{subcaption}

\begin{document}

\begin{figure}
    \begin{subfigure}[t]{0.3\textwidth}
        \includegraphics[width=\linewidth]{./img.tikz}
        \caption{Tikz figure read by includegraphics and scaled to linewidth by tikzscale}
    \end{subfigure}
\hfill
    \begin{subfigure}[t]{0.3\textwidth}
        \resizebox{\linewidth}{!}{\input{./img.pgf}}       %This works
        \caption{PGF figure read by input and scaled to linewidth by resizebox}
    \end{subfigure}
\hfill
    \begin{subfigure}[t]{0.3\textwidth}
        \includegraphics[width=\linewidth]{./img.pgf} %But I want this
        \caption{PGF figure read by includegraphics and scaled to linewidth by tikzscale}
\end{subfigure}    
\end{figure}


\end{document}

图片.pgf

\pgfdeclareradialshading{new}{\pgfqpoint{0bp}{0bp}}{%
 color(0bp)=(blue);
 color(6bp)=(blue!90!black);
 color(20bp)=(black!75!blue);
 color(30bp)=(black!85!blue)}

 \begin{tikzpicture}
    \begin{pgfscope}
        \pgfpathcircle{\pgfpoint{3cm}{0cm}}{1cm}
        \pgfusepath{clip}
        \begin{pgflowlevelscope}{\pgftransformshift{\pgfpoint{3cm}{0cm}}, \pgftransformrotate{45}}
          \pgfpathellipse{\pgfpoint{0cm}{0.5cm}}
                         {\pgfpoint{1.75cm}{0cm}}
                         {\pgfpoint{0cm}{1.55cm}}
          \pgfshadepath{new}{0}
          \pgfusepath{}
        \end{pgflowlevelscope}
      \end{pgfscope}
      {
      \pgftransformshift{\pgfpoint{3cm}{0cm}}
      \pgfset{minimum size=2cm}
      \pgfnode{circle}{center}{pgf}{nodename}{
        \pgfusepath{}}
      }
\end{tikzpicture}

图片.tikz

\pgfdeclareradialshading{new}{\pgfqpoint{0bp}{0bp}}{%
 color(0bp)=(blue);
 color(6bp)=(blue!90!black);
 color(20bp)=(black!75!blue);
 color(30bp)=(black!85!blue)}

\begin{tikzpicture}
\begin{scope}
    \clip (-1,0) circle (1cm);
    \draw [fill=black!70] (0, 0) circle (1cm);
    \begin{scope}[transform canvas={xshift=-1cm, rotate=45}]
        \shade [shading=new] (0.00,0.50) ellipse (1.75 and 1.55);
    \end{scope}
    \node (nodename) at (-1, 0) [circle, minimum size = 2cm] {tikz};
\end{scope}
\end{tikzpicture}

答案1

您可以将 TikZ 图片全部转换为 PDF,然后以 PDF 格式加载这些图片。这还有第二个好处:您无需等待在文档上运行 TeX 时处理所有(可能非常大)TikZ 图片。

转换可以按如下方式进行。创建一个单独的文档,将 TikZ 图片放在该文档的单独页面上,不带页码和页眉。使用 TeX 处理该文档并创建 PDF 输出。然后执行以下操作:

pdfcrop output.pdf
pdfseprate output-crop.pdf pic-%d.pdf

您的图片保存在等中pic-1.pdfpic-2.pdf

相关内容