是否可以将TikZ图提取为图像文件?[关闭]


81

我正在使用TikZ在LaTeX中绘制图表,然后将其隔离为图像文件以使其联机。我正在使用TeXnicCenter编辑源。

有没有一种方法可以直接提取这些图而不必从完成的PDF文件中提取它们?


1
我使用一个名为CirKuit的程序,该程序充当TikZ编辑器,并允许您将图表保存为各种图像格式中的任何一种。我认为它在幕后的作用是使用乳胶和dvitopng或类似的东西。如果我能在其他人发布任何内容之前找到详细信息,我将发布答案。
David Z

1
您是要自动从文本中隔离图表,还是要剪切并粘贴TikZ代码?
查尔斯·斯图尔特

2
另请参见将LaTeX文档编译成尽可能短的PNG图像,以及与之相关的其他问题。
Martin Scharrer 2012年

Answers:


29

跟进我的评论:Cirkuit通过运行以下命令序列将TikZ图转换为图像:

pdflatex img.tex
pdftops -eps img.pdf
convert -density 300 img.eps img.png

img.tex将是遵循此模板的LaTeX文件:

\documentclass{article}
\usepackage{tikz,amsmath,siunitx}
\usetikzlibrary{arrows,snakes,backgrounds,patterns,matrix,shapes,fit,calc,shadows,plotmarks}
\usepackage[graphics,tightpage,active]{preview}
\PreviewEnvironment{tikzpicture}
\PreviewEnvironment{equation}
\PreviewEnvironment{equation*}
\newlength{\imagewidth}
\newlength{\imagescale}
\pagestyle{empty}
\thispagestyle{empty}
\begin{document}
\begin{tikzpicture}
    % (your TikZ code goes here)
\end{tikzpicture}
\end{document}

如果您能够使用Cirkuit或类似的编辑器,或者自己编写脚本以将图表放入该模板并运行适当的工具,则可以快速将TikZ代码转换为PNG图像。

为了更直接地回答您的问题...不,我不知道有什么方法可以将TikZ图直接转换为PNG,而无需在某个阶段通过PDF文件(或至少是DVI)。


谢谢!我想要避免的是必须手动隔离图表,因此应该可以正常工作。
乔传元

66

我建议采用以下方法。将有问题的TikZ图片放在单独的文件中,并使用standalone该类将其独立编译。它使用preview其他答案中提到的软件包。要将图片包含在主文档中,请先在其中加载standalone 程序包,然后\input在图片文件上使用命令。

这将使您获得TikZ图片的单个PDF而没有空白。然后,您可以使用PDF到PNG转换器来获取PNG(建议通过Web发布工程图)。SVG格式会更好,因为它是矢量格式,但并非所有浏览器都可以显示它。

这里有一些示例代码。TikZ图片文件(例如pic.tex):

\documentclass{standalone}
\usepackage{tikz}
% all other packages and stuff you need for the picture

\begin{document}
\begin{tikzpicture}
% your picture code
\end{tikzpicture}
\end{document}

主要文件:

\documentclass{article} % or whatever class you are using
\usepackage{standalone}
\usepackage{tikz}
% All other packages required
\begin{document}
% Text text text
% somewhere where you want the tikz picture
\input{pic}
% Text text text
\end{document}

然后编译图片并将其转换,例如,使用ImageMagick:

pdflatex pic
convert -density 600x600 pic.pdf -quality 90 -resize 800x600 pic.png

或尝试SVG:

convert pic.pdf pic.svg

我发现pdf2svg比imagemagick是将PDF转换为SVG的更可靠的工具。
谷氨酰胺

1
@Glutanimate:在此期间,我开始使用inkscape它。
Martin Scharrer

@MartinScharrer我能够将pdf文件嵌入到父文档中,而无需将其转换为png或svg:\ includegraphics {file_name.pdf}
user4035 2013年

@ user4035:当然,这是将PDF包含到(pdf)LaTeX文档中的正常方法。但是,这个问题是关于如何将图作为光栅图像文件获取的,以便它们可以在线显示。
Martin Scharrer 2013年

11

请参阅TikZ手册的“外部化图形”部分。这使您可以制作图形的EPS或PDF版本。我使用EPS文件,将它们转换为TIFF,然后可以将它们放在需要的地方。


截至2013年,我认为这可能是最好的方法。
Alex Hirzel

在2017年,这是pgfmanual的50.4节(第607页)。看来我们无法提供该部分网页的链接(仅以pdf格式)。:(
Yaroslav Nikitenko '18

从理论上讲,这很好。在实践中,使用tikzexternalize相当一段时间后,我已恢复为独立方法,因为似乎更容易使其工作。我在tikzexternalize方面遇到了很多麻烦。

7

我通常使用以下方式:

\documentclass{article}
\usepackage[pdftex,active,tightpage]{preview}
%\setlength\PreviewBorder{2mm} % use to add a border around the image
\usepackage{tikz}
\begin{document}
\begin{preview}
\begin{tikzpicture}
    \shade (0,0) circle(2); % background
    \draw (0,0) circle(2);  % rim
    \draw (.75,1) circle(.5);   % right eye
    \fill (.66,.9) circle(.25); % right pupil
    \draw (-.75,1) circle(.5);  % left eye
    \fill (-.66,.9) circle(.25);% left pupil
    \fill (.2,0) circle (.1);   % right nostril
    \fill (-.2,0) circle (.1);  % left nostril
    \draw (-135:1) arc (-135:-45:1) -- cycle; % mouth
  \end{tikzpicture}
\end{preview}
\end{document}

生成的pdf文件包含独立的TikZ图片。要将其转换为任何其他文件格式,只需使用Gimp打开它。


2

我使用此Makefile规则从每个包含一个tikzpicture的.tex文件创建PNG文件和缩略图。它的工作类似于在TeXample.net上创建图像:

%.png:%。tex
        @sed的s / ^ \\开始{document} / \
\\ pgfrealjobname {dummy} \\ begin {document} \\ beginpgfgraphicnamed {example} /'$ <| \
sed's / ^ \\ end {document} / \\ endpgfgraphicnamed \\ end {document} /'> example.tex; \
        pdflatex --jobname = example example.tex; \
        gs -dNOPAUSE -r120 -dGraphicsAlphaBits = 4 -dTextAlphaBits = 4 -sDEVICE = png16m \
-sOutputFile = $ @ -dBATCH example.pdf; \
        convert -thumbnail 200 $ @ $(addsuffix .thumb.png,$(基本名$ @)); \
        mv example.pdf $(addsuffix .pdf,$(基本名称$ <)); rm示例。*

ghostview(gs)可能被替换convert,您可以替换example为另一个tempfile前缀。


2

Windows:对像我这样的菜鸟要完全明确

按照上面Habi在您的乳胶代码中建议的那样使用prewiew软件包以除去边距。

安装MIktex和Inkscape并使用以下bat文件:

cd = "C:\Path to tex"
pdflatex input-file-name.tex
"C:\Program Files (x86)\Inkscape\inkscape.exe" input-file-name.pdf --export-plain-svg=output-file-name.svg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.