Ist es möglich, TikZ-Diagramme als Bilddateien zu extrahieren? [geschlossen]

81

Ich verwende TikZ, um Diagramme in LaTeX zu zeichnen, die ich dann als Bilddateien isolieren möchte, um sie online zu stellen. Ich verwende TeXnicCenter, um die Quellen zu bearbeiten.

Gibt es eine Möglichkeit, diese Diagramme direkt zu extrahieren, ohne sie aus der fertigen PDF-Datei extrahieren zu müssen?

Qiaochu Yuan
quelle
1
Ich verwende ein Programm namens CirKuit, das als TikZ-Editor dient und es Ihnen ermöglicht, das Diagramm in einem beliebigen Bildformat zu speichern. Ich denke, was es hinter den Kulissen tut, ist Latex und Dvitopng oder ähnliches zu verwenden. Ich werde eine Antwort posten, wenn ich die Details herausfinden kann, bevor jemand anderes etwas veröffentlicht.
David Z
1
Möchten Sie die Diagramme automatisch vom Text isolieren oder möchten Sie den TikZ-Code ausschneiden und einfügen?
Charles Stewart
2
Siehe auch Kompilieren eines LaTeX-Dokuments in ein möglichst kurzes PNG-Bild und die damit verbundenen anderen Fragen.
Martin Scharrer

Antworten:

29

Folgen Sie meinem Kommentar: Cirkuit konvertiert TikZ-Diagramme in Bilder, indem es etwa die folgende Befehlsfolge ausführt :

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

Hier img.texwäre eine LaTeX-Datei, die dieser Vorlage folgt:

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

Wenn Sie Cirkuit oder einen ähnlichen Editor verwenden oder ein Skript für sich selbst schreiben können, um Ihr Diagramm in diese Vorlage einzufügen und die entsprechenden Tools auszuführen, haben Sie eine schnelle Möglichkeit, TikZ-Code in ein PNG-Bild zu konvertieren.

Um Ihre Frage direkter zu beantworten ... nein, ich kenne keine Möglichkeit, ein TikZ-Diagramm direkt in PNG zu konvertieren , ohne irgendwann eine PDF-Datei (oder zumindest DVI) durchzugehen.

David Z.
quelle
Vielen Dank! Alles, was ich vermeiden wollte, war, die Diagramme manuell zu isolieren, damit dies gut funktioniert.
Qiaochu Yuan
66

Ich würde den folgenden Ansatz empfehlen. Platzieren Sie das betreffende TikZ-Bild in einer separaten Datei und standalonekompilieren Sie es mithilfe der Klasse eigenständig. Es verwendet das previewin den anderen Antworten erwähnte Paket. Um das Bild in das Hauptdokument aufzunehmen, laden Sie zuerst das standalone Paket dort und verwenden Sie dann den \inputBefehl in der Bilddatei.

Auf diese Weise erhalten Sie ein einzelnes PDF des TikZ-Bildes ohne Ränder. Dann können Sie beispielsweise einen PDF-zu-PNG-Konverter verwenden, um ein PNG zu erhalten (empfohlen für die Veröffentlichung von Zeichnungen im Internet). Das SVG-Format wäre besser, da es sich um ein Vektorformat handelt, das jedoch möglicherweise nicht von allen Browsern angezeigt werden kann.

Hier ein Beispielcode. Die TikZ-Bilddatei (zB 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}

Das Hauptdokument:

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

Dann kompilieren Sie das Bild und konvertieren es zB mit ImageMagick:

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

oder versuchen Sie es mit SVG:

convert pic.pdf pic.svg
Martin Scharrer
quelle
Ich habe festgestellt, dass pdf2svg ein zuverlässigeres Tool zum Konvertieren von PDF in SVG ist als imagemagick.
Glutanimate
1
@Glutanimate: In der Zwischenzeit habe ich angefangen, es zu verwenden inkscape.
Martin Scharrer
@ MartinScharrer Ich konnte eine PDF-Datei in das übergeordnete Dokument einbetten, ohne sie in PNG oder SVG zu konvertieren: \ includegraphics {Dateiname.pdf}
user4035
@ user4035: Sicher, das ist der normale Weg, um PDFs in Ihr (pdf) LaTeX-Dokument aufzunehmen. In dieser Frage geht es jedoch darum, wie die Diagramme als Rasterbilddateien abgerufen werden, damit sie online angezeigt werden können.
Martin Scharrer
11

Siehe den TikZ-Handbuchabschnitt „Externalisierung von Grafiken“. Auf diese Weise können Sie EPS- oder PDF-Versionen Ihrer Grafiken erstellen. Ich verwende EPS-Dateien, konvertiere sie in TIFFs und kann sie dann überall ablegen.

Joseph Wright
quelle
Ab 2013 denke ich, dass dies wahrscheinlich der beste Ansatz ist.
Alex Hirzel
Im Jahr 2017 ist dies Abschnitt 50.4 (Seite 607) des Handbuchs. Es scheint, dass wir den Link zu einer Webseite für den Abschnitt nicht geben können (nur im PDF-Format). :(
Jaroslaw Nikitenko
Theoretisch funktioniert das gut. In der Praxis bin ich nach einer Weile mit tikzexternalize zum Standalone-Ansatz zurückgekehrt, weil es einfach einfacher zu sein scheint, ihn zum Laufen zu bringen. Ich hatte ziemlich viel Ärger mit tikzexternalize.
25.
7

Ich benutze im Allgemeinen etwas in dieser Richtung:

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

Die generierte PDF-Datei enthält das eigenständige TikZ-Bild. Um es in ein anderes Dateiformat zu konvertieren, öffnen Sie es einfach mit Gimp.

Habi
quelle
2

Ich verwende diese Makefile-Regel, um PNG-Dateien und Miniaturansichten aus .tex-Dateien zu erstellen, die jeweils ein Tikzpicture enthalten. Es funktioniert ähnlich wie beim Erstellen von Bildern auf TeXample.net :

% .png:% .tex
        @seds / ^ \\ begin {document} / \
\\ pgfrealjobname {Dummy} \\ begin {document} \\ beginpgfgraphicnamed {example} / '$ <| \.
sed 's / ^ \\ end {document} / \\ endpgfgraphicnamed \\ end {document} /'> example.tex; \.
        pdflatex --jobname = Beispiel example.tex; \.
        gs -dNOPAUSE -r120 -dGraphicsAlphaBits = 4 -dTextAlphaBits = 4 -sDEVICE = png16m \
-sOutputFile = $ @ -dBATCH example.pdf; \.
        convert -thumbnail 200 $ @ $ (fügt das Suffix .thumb.png hinzu, $ (Basisname $ @)); \.
        mv example.pdf $ (fügt das Suffix .pdf hinzu, $ (Basisname $ <)); rm Beispiel. *

Ghostview ( gs) kann wahrscheinlich durch ersetzt werden convertund Sie können es durch ein exampleanderes Tempfile-Präfix ersetzen .

Jakob
quelle
2

Windows: Nur um für Noobs wie mich ganz explizit zu sein

Verwenden Sie das Prewiew-Paket, wie Habi oben in Ihrem Latexcode vorgeschlagen hat, um Ränder zu entfernen.

Installieren Sie MIktex und Inkscape und verwenden Sie die folgende bat-Datei:

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 郝海东 冠状 病 六四 事件 法轮功
quelle