¿Es posible extraer diagramas TikZ como archivos de imagen? [cerrado]

81

Estoy usando TikZ para dibujar diagramas en LaTeX que luego quiero aislar como archivos de imagen para poner en línea. Estoy usando TeXnicCenter para editar las fuentes.

¿Existe alguna forma de extraer estos diagramas directamente sin tener que extraerlos del archivo PDF terminado?

Qiaochu Yuan
fuente
1
Utilizo un programa llamado CirKuit que sirve como editor de TikZ y te permite guardar el diagrama como cualquiera de los varios formatos de imagen. Creo que lo que hace detrás de escena, sin embargo, es usar látex y dvitopng o algo así. Publicaré una respuesta si puedo averiguar los detalles antes de que alguien más publique algo.
David Z
1
¿Quiere aislar los diagramas del texto automáticamente, o está feliz de cortar y pegar el código TikZ?
Charles Stewart
2
Consulte también Compilar un documento LaTeX en una imagen PNG que sea lo más corta posible y las otras preguntas vinculadas a ella.
Martin Scharrer

Respuestas:

29

Siguiendo con mi comentario: Cirkuit convierte los diagramas TikZ en imágenes ejecutando algo como la siguiente secuencia de comandos:

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

Aquí img.texhabría un archivo LaTeX que sigue esta plantilla:

\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}

Si puede usar Cirkuit o un editor similar, o escribir un script para usted mismo para poner su diagrama en esa plantilla y ejecutar las herramientas adecuadas, tendrá una forma rápida de convertir el código TikZ en una imagen PNG.

Para responder a su pregunta de forma más directa ... no, no conozco ninguna forma de convertir un diagrama TikZ directamente a PNG sin pasar por un archivo PDF (o al menos DVI) en algún momento.

David Z
fuente
¡Gracias! Todo lo que quería evitar era tener que aislar manualmente los diagramas, por lo que esto debería funcionar bien.
Qiaochu Yuan
66

Recomendaría el siguiente enfoque. Coloque la imagen de TikZ en cuestión en un archivo separado y use la standaloneclase para compilarla de forma independiente. Utiliza el previewpaquete mencionado en las otras respuestas. Para incluir la imagen en el documento principal, primero cargue el standalone paquete allí y luego use el \inputcomando en el archivo de imagen.

Esto le permitirá obtener un único PDF de la imagen TikZ sin márgenes. Luego puede usar, por ejemplo, un convertidor de PDF a PNG para obtener un PNG (recomendado para la publicación web de dibujos). El formato SVG sería mejor porque es un formato vectorial, pero no todos los navegadores pueden mostrarlo.

Aquí un código de ejemplo. El archivo de imagen de TikZ (p. Ej., 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}

El documento principal:

\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}

Luego compile la imagen y conviértala, por ejemplo, con ImageMagick:

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

o prueba SVG:

convert pic.pdf pic.svg
Martin Scharrer
fuente
He descubierto que pdf2svg es una herramienta más confiable para convertir PDF a SVG que imagemagick.
Glutanimate
1
@Glutanimate: Mientras tanto, comencé a usarlo inkscape.
Martin Scharrer
@MartinScharrer Pude incrustar un archivo pdf en el documento principal, sin convertirlo a png o svg: \ includegraphics {
file_name.pdf
@ user4035: Claro, esa es la forma normal de incluir archivos PDF en su documento (pdf) LaTeX. Sin embargo, esta pregunta trata sobre cómo obtener los diagramas como archivos de imagen de trama para que se puedan mostrar en línea.
Martin Scharrer
11

Consulte la sección “Externalización de gráficos” del manual de TikZ. Esto le permite crear versiones EPS o PDF de sus gráficos. Utilizo archivos EPS, los convierto a TIFF y luego puedo colocarlos donde sea necesario.

Joseph Wright
fuente
A partir de 2013, creo que este es probablemente el mejor enfoque.
Alex Hirzel
En 2017, esta es la sección 50.4 (página 607) del manual pgf. Parece que no podemos dar el enlace a una página web para la sección (solo está en pdf). :(
Yaroslav Nikitenko
En teoría, esto funciona muy bien. En la práctica, después de usar tikzexternalize durante bastante tiempo, he vuelto al enfoque independiente, porque parece más fácil hacerlo funcionar. He tenido bastantes problemas con tikzexternalize.
jhin
7

Generalmente estoy usando algo en estas líneas:

\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}

El archivo pdf generado contiene la imagen TikZ independiente. Para convertirlo a cualquier otro formato de archivo, simplemente ábralo con Gimp.

Habi
fuente
2

Utilizo esto para crear la regla Makefile para crear archivos PNG y miniaturas a partir de archivos .tex que contienen una imagen tikz cada uno. Funciona de manera similar a la creación de imágenes en TeXample.net :

% .png:% .tex
        @sed 's / ^ \\ begin {document} / \
\\ pgfrealjobname {dummy} \\ begin {document} \\ beginpgfgraphicnamed {example} / '$ <| \
sed 's / ^ \\ end {documento} / \\ endpgfgraphicnamed \\ end {document} /'> ejemplo.tex; \
        pdflatex --jobname = ejemplo example.tex; \
        gs -dNOPAUSE -r120 -dGraphicsAlphaBits = 4 -dTextAlphaBits = 4 -sDEVICE = png16m \
-sOutputFile = $ @ -dBATCH example.pdf; \
        convertir -miniatura 200 $ @ $ (añade sufijo .thumb.png, $ (nombre base $ @)); \
        mv example.pdf $ (añade sufijo .pdf, $ (nombre base $ <)); ejemplo rm. *

ghostview ( gs) probablemente pueda ser reemplazado por converty usted puede reemplazarlo examplecon otro prefijo de archivo temporal.

Jakob
fuente
2

Windows: solo para ser completamente explícito para novatos como yo

Utilice el paquete de vista previa como sugirió Habi anteriormente en su código de látex para eliminar los márgenes.

Instale MIktex e Inkscape y use el siguiente archivo 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
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
fuente