web-dev-qa-db-fra.com

Diagrammes autonomes avec TikZ?

J'utilise TikZ pour dessiner des diagrammes dans LaTeX que je veux ensuite isoler sous forme de fichiers image à mettre en ligne. Je suppose qu'il existe un moyen d'extraire ces diagrammes directement sans avoir à les démêler du fichier .pdf terminé. Comment pourrais-je procéder? (Si cela est important, j'utilise TeXnicCenter.)

76
Qiaochu Yuan

Suite à mon commentaire: Cirkuit convertit les diagrammes TikZ en images en exécutant quelque chose comme la séquence de commandes suivante:

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

Ici img.tex serait un fichier LaTeX qui suit ce modèle:

\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 vous pouvez utiliser Cirkuit ou un éditeur similaire, ou écrire un script pour vous-même pour mettre votre diagramme dans ce modèle et exécuter les outils appropriés, vous aurez un moyen rapide de convertir le code TikZ en une image PNG.

Pour répondre plus directement à votre question ... non, je ne connais aucun moyen de convertir un diagramme TikZ directement en PNG sans passer par un = PDF (ou au moins DVI) à un moment donné.

25
David Z

Je vous recommanderais l'approche suivante. Placez l'image tikz dans un fichier séparé et utilisez la classe "autonome" pour la compiler de façon autonome. Il utilise le package 'preview' mentionné dans les autres réponses. Pour inclure l'image dans le document principal, chargez le 'autonome' package en premier et utilisez\input sur le fichier image.

Cela vous permettra d'obtenir un seul PDF de l'image tikz sans marges. Ensuite, vous pouvez utiliser un convertisseur PDF-to-PNG pour obtenir un PNG (recommandé pour la publication Web de dessins). Le format SVG serait plus agréable, car il s'agit d'un format vectoriel, mais tous les navigateurs ne sont peut-être pas en mesure de l'afficher.

Voici un exemple de code:

Le fichier image tikz (par exemple '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}

Le document 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}

Compilez ensuite l'image et convertissez-la, par ex. avec ImageMagick (par exemple sous Linux):

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

ou essayez SVG:

convert pic.pdf pic.svg
60
Martin Scharrer

Voir la section du manuel Tikz "Externalisation des graphiques". Cela vous permet de créer des versions EPS ou PDF de vos graphiques. J'utilise des fichiers EPS, les convertis en TIFF et puis je les place où je le souhaite.

10
Joseph Wright

J'utilise généralement quelque chose dans ce sens:

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

Le fichier pdf généré contient l'image TikZ autonome. Pour le convertir dans n'importe quel autre format de fichier, ouvrez-le simplement avec Gimp.

7
Habi

J'utilise ceci pour créer des fichiers PNG et des miniatures à partir de fichiers .tex contenant chacun une image tikz. Cela fonctionne de manière similaire à la création d'images sur TeXample.net :

%. png:% .tex 
 @sed/^ \\ begin {document}/\ 
 \\ pgfrealjobname {dummy} \\ begin {document} \\ beginpgfgraphicnamed {example}/'$ <|\
 sed/^ \\ end {document}/\\ endpgfgraphicnamed \\ end {document}/'> example.tex;\
 pdflatex --jobname = exemple example.tex;\
 gs -dNOPAUSE -r120 -dGraphicsAlphaBits = 4 -dTextAlphaBits = 4 -sDEVICE = png16m\
 - sOutputFile = $ @ -dBATCH example.pdf;\
 convert -thumbnail 200 $ @ $ (ajouteuffix .thumb.png, $ (nom de base $ @));\
 mv example.pdf $ (ajouteuffix .pdf, $ (nom de base $ <)); exemple rm. * 

ghostview (gs) peut probablement être remplacé par convert et vous pouvez remplacer example par un autre préfixe de fichier temporaire.

2
Jakob

Windows: juste pour être complètement explicite pour les noobs comme moi

Utilisez le package de prévisualisation comme Habi l'a suggéré dans ce qui précède dans votre code latex pour supprimer les marges.

Installez MIktex et Inkscape et utilisez le fichier bat suivant:

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