Czy można wyodrębnić diagramy TikZ jako pliki obrazów? [Zamknięte]

81

Używam TikZ do rysowania diagramów w LaTeX, które następnie chcę wyodrębnić jako pliki obrazów do umieszczenia w Internecie. Używam TeXnicCenter do edycji źródeł.

Czy istnieje sposób na bezpośrednie wyodrębnienie tych diagramów bez konieczności wyodrębniania ich z gotowego pliku PDF?

Qiaochu Yuan
źródło
1
Używam programu o nazwie CirKuit, który służy jako edytor TikZ i pozwala na zapisanie diagramu w dowolnym z różnych formatów graficznych. Myślę jednak, że za kulisami używa lateksu i dvitopngu lub czegoś w tym rodzaju. Opublikuję odpowiedź, jeśli uda mi się dowiedzieć szczegółów, zanim ktoś inny coś opublikuje.
David Z
1
Czy chcesz automatycznie izolować diagramy od tekstu, czy może chcesz wyciąć i wkleić kod TikZ?
Charles Stewart
2
Zobacz także Skompilowanie dokumentu LaTeX do możliwie najkrótszego obrazu PNG i inne powiązane z nim pytania.
Martin Scharrer

Odpowiedzi:

29

W związku z moim komentarzem: Cirkuit konwertuje diagramy TikZ na obrazy, uruchamiając coś w rodzaju następującej sekwencji poleceń:

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

Oto img.texplik LaTeX zgodny z tym szablonem:

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

Jeśli jesteś w stanie użyć Cirkuit lub podobnego edytora lub napisać skrypt dla siebie, aby umieścić diagram w tym szablonie i uruchomić odpowiednie narzędzia, będziesz mieć szybki sposób na przekonwertowanie kodu TikZ na obraz PNG.

Odpowiadając na twoje pytanie bardziej bezpośrednio ... nie, nie znam żadnego sposobu na konwersję diagramu TikZ bezpośrednio do PNG bez przechodzenia na jakimś etapie przez plik PDF (lub przynajmniej DVI).

David Z
źródło
Dzięki! Chciałem tylko uniknąć konieczności ręcznego izolowania diagramów, więc powinno to działać dobrze.
Qiaochu Yuan
66

Poleciłbym następujące podejście. Umieść dany obraz TikZ w osobnym pliku i użyj standaloneklasy, aby skompilować go samodzielnie. Używa previewpakietu wymienionego w innych odpowiedziach. Aby dołączyć obraz do głównego dokumentu, najpierw załaduj tam standalone pakiet, a następnie użyj \inputpolecenia na pliku obrazu.

Umożliwi to pobranie pojedynczego pliku PDF obrazu TikZ bez marginesów. Następnie możesz użyć, powiedzmy, konwertera PDF do PNG, aby uzyskać plik PNG (zalecany do publikowania rysunków w Internecie). Format SVG byłby ładniejszy, ponieważ jest to format wektorowy, ale nie wszystkie przeglądarki mogą go wyświetlić.

Oto przykładowy kod. Plik obrazu TikZ (np. 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}

Główny dokument:

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

Następnie skompiluj obraz i przekonwertuj go, np. Za pomocą ImageMagick:

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

lub wypróbuj SVG:

convert pic.pdf pic.svg
Martin Scharrer
źródło
Zauważyłem, że pdf2svg jest bardziej niezawodnym narzędziem do konwersji plików PDF do SVG niż imagemagick.
Glutanimate
1
@Glutanimate: W międzyczasie zacząłem go używać inkscape.
Martin Scharrer
@MartinScharrer Udało mi się osadzić plik pdf w dokumencie nadrzędnym, bez konwertowania go do
formatu
@ user4035: Jasne, to normalny sposób umieszczania plików PDF w dokumencie (pdf) LaTeX. Jednak to pytanie dotyczy tego, jak uzyskać diagramy jako pliki obrazów rastrowych, aby można je było wyświetlać online.
Martin Scharrer
11

Zobacz rozdział podręcznika TikZ „Eksternalizacja grafiki”. Pozwala to tworzyć wersje EPS lub PDF grafiki. Używam plików EPS, konwertuję je na TIFF i mogę je umieścić w dowolnym miejscu.

Joseph Wright
źródło
Od 2013 roku uważam, że jest to prawdopodobnie najlepsze podejście.
Alex Hirzel
W 2017 roku jest to sekcja 50.4 (strona 607) podręcznika pgf. Wygląda na to, że nie możemy podać linku do strony internetowej dla sekcji (jest tylko w formacie pdf). :(
Yaroslav Nikitenko
Teoretycznie działa to ładnie. W praktyce, po dłuższym używaniu tikzexternalize, wróciłem do podejścia samodzielnego, ponieważ wydaje się, że łatwiej jest go uruchomić. Miałem sporo kłopotów z tikzexternalize.
jhin
7

Generalnie używam czegoś podobnego:

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

Wygenerowany plik pdf zawiera samodzielny obraz TikZ. Aby przekonwertować go na dowolny inny format pliku, po prostu otwórz go za pomocą Gimp.

Habi
źródło
2

Używam tego do reguły Makefile, aby utworzyć pliki PNG i miniatury z plików .tex, które zawierają po jednym tikzpicture. Działa podobnie do tworzenia obrazów w TeXample.net :

% .png:% .tex
        @sed 's / ^ \\ begin {document} / \
\\ pgfrealjobname {dummy} \\ begin {document} \\ beginpgfgraphicnamed {example} / '$ <| \
sed 's / ^ \\ end {document} / \\ endpgfgraphicnamed \\ end {document} /'> example.tex; \
        pdflatex --jobname = przykład example.tex; \
        gs -dNOPAUSE -r120 -dGraphicsAlphaBits = 4 -dTextAlphaBits = 4 -sDEVICE = png16m \
-sOutputFile = $ @ -dBATCH przykład.pdf; \
        konwersja -thumbnail 200 $ @ $ (addsuffix .thumb.png, $ (basename $ @)); \
        mv example.pdf $ (addsuffix .pdf, $ (basename $ <)); przykład rm. *

Ghostview ( gs) można prawdopodobnie convertzastąpić exampleinnym prefiksem pliku tymczasowego.

Jakob
źródło
2

Windows: tylko po to, aby być całkowicie wyraźnym dla noobów takich jak ja

Użyj pakietu prewiew, jak zasugerował Habi w powyższym kodzie lateksu, aby usunąć marginesy.

Zainstaluj MIktex i Inkscape i użyj następującego pliku 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 郝海东 冠状 病 六四 事件 法轮功
źródło