我一直将在 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.pdf
。pic-2.pdf