Có thể trích xuất sơ đồ TikZ dưới dạng tệp hình ảnh không? [đóng cửa]


81

Tôi đang sử dụng TikZ để vẽ sơ đồ trong LaTeX mà sau đó tôi muốn tách biệt dưới dạng tệp hình ảnh để đưa lên mạng. Tôi đang sử dụng TeXnicCenter để chỉnh sửa các nguồn.

Có cách nào để trích xuất các sơ đồ này trực tiếp mà không cần phải trích xuất chúng từ tệp PDF đã hoàn thành không?


1
Tôi sử dụng một chương trình có tên CirKuit đóng vai trò như một trình chỉnh sửa TikZ và cho phép bạn lưu sơ đồ dưới dạng bất kỳ định dạng hình ảnh nào. Tôi nghĩ những gì nó làm đằng sau hậu trường, là sử dụng latex và dvitopng hoặc những thứ tương tự. Tôi sẽ đăng câu trả lời nếu tôi có thể tìm hiểu chi tiết trước khi bất kỳ ai khác đăng điều gì đó.
David Z

1
Bạn có muốn tự động tách sơ đồ khỏi văn bản hay bạn cảm thấy vui khi cắt và dán mã TikZ?
Charles Stewart

2
Xem thêm Biên dịch tài liệu LaTeX thành hình ảnh PNG càng ngắn càng tốt và các câu hỏi khác được liên kết với nó.
Martin Scharrer

Câu trả lời:


29

Tiếp theo nhận xét của tôi: Cirkuit chuyển đổi sơ đồ TikZ thành hình ảnh bằng cách chạy một cái gì đó giống như chuỗi lệnh sau:

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

Đây img.texsẽ là một tệp LaTeX theo sau mẫu này:

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

Nếu bạn có thể sử dụng Cirkuit hoặc một trình chỉnh sửa tương tự hoặc viết kịch bản cho chính bạn để đưa sơ đồ của bạn vào mẫu đó và chạy các công cụ thích hợp, bạn sẽ có một cách nhanh chóng để chuyển đổi mã TikZ thành hình ảnh PNG.

Để trả lời câu hỏi của bạn trực tiếp hơn ... không, tôi không biết có cách nào để chuyển đổi biểu đồ TikZ trực tiếp sang PNG mà không cần thông qua tệp PDF (hoặc ít nhất là DVI) ở một số giai đoạn.


Cảm ơn! Tất cả những gì tôi muốn tránh là phải cô lập các sơ đồ theo cách thủ công, vì vậy điều này sẽ hoạt động tốt.
Qiaochu Yuan

66

Tôi muốn giới thiệu cách tiếp cận sau đây. Đặt hình ảnh TikZ được đề cập trong một tệp riêng biệt và sử dụng standalonelớp để biên dịch nó độc lập. Nó sử dụng previewgói được đề cập trong các câu trả lời khác. Để đưa ảnh vào tài liệu chính, hãy tải standalone gói ở đó trước rồi sử dụng \inputlệnh trên tệp ảnh.

Điều này sẽ cho phép bạn tải một tệp PDF duy nhất của ảnh TikZ mà không có lề. Sau đó, bạn có thể sử dụng, chẳng hạn như trình chuyển đổi PDF sang PNG để lấy PNG (được khuyến nghị để xuất bản bản vẽ trên web). Định dạng SVG sẽ đẹp hơn, vì đó là định dạng vectơ, nhưng không phải tất cả các trình duyệt đều có thể hiển thị nó.

Đây là một số mã ví dụ. Tệp ảnh TikZ (ví dụ 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}

Tài liệu chính:

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

Sau đó, biên dịch hình ảnh và chuyển đổi nó, ví dụ: với ImageMagick:

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

hoặc thử SVG:

convert pic.pdf pic.svg

Tôi thấy pdf2svg là một công cụ đáng tin cậy hơn để chuyển đổi PDF sang SVG so với imagemagick.
Glutanimate

1
@Glutanimate: Trong thời gian chờ đợi, tôi bắt đầu sử dụng inkscapenó.
Martin Scharrer

@MartinScharrer tôi đã có thể tập tin pdf nhúng vào tài liệu gốc, mà không chuyển đổi nó để png hoặc svg: \ includegraphics {file_name.pdf}
user4035

@ user4035: Chắc chắn rồi, đó là cách thông thường để chèn PDF vào tài liệu LaTeX (pdf) của bạn. Tuy nhiên, câu hỏi này là về cách lấy các sơ đồ dưới dạng tệp hình ảnh raster để chúng có thể được hiển thị trực tuyến.
Martin Scharrer

11

Xem phần hướng dẫn sử dụng TikZ “Đồ họa bên ngoài”. Điều này cho phép bạn tạo các phiên bản EPS hoặc PDF cho đồ họa của mình. Tôi sử dụng các tệp EPS, chuyển đổi chúng thành TIFF và sau đó có thể đặt chúng ở bất cứ đâu tôi cần.


Tính đến năm 2013, tôi nghĩ đây có lẽ là cách tiếp cận tốt nhất.
Alex Hirzel,

Năm 2017, đây là phần 50.4 (trang 607) của pgfmanual. Có vẻ như chúng tôi không thể cung cấp liên kết đến trang web cho phần này (nó chỉ ở dạng pdf). :(
Yaroslav Nikitenko

Về mặt lý thuyết, điều này hoạt động độc đáo. Trên thực tế, sau khi sử dụng tikzexternalize được một thời gian, tôi đã hoàn nguyên về cách tiếp cận độc lập, vì có vẻ dễ dàng hơn để làm cho nó hoạt động. Tôi đã gặp khá nhiều rắc rối với tikzexternalize.
jhin

7

Tôi thường sử dụng một cái gì đó dọc theo những dòng này:

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

Tệp pdf được tạo chứa hình ảnh TikZ độc lập. Để chuyển đổi nó sang bất kỳ định dạng tệp nào khác, chỉ cần mở nó bằng Gimp.


2

Tôi sử dụng điều này để quy tắc Makefile tạo tệp PNG và hình thu nhỏ từ các tệp .tex chứa mỗi tệp một tikzpicture. Nó hoạt động tương tự như việc tạo hình ảnh tại TeXample.net :

% .png:% .tex
        @sed 's / ^ \\ begin {document} / \
\\ pgfrealjobname {dummy} \\ begin {document} \\ beginpgfgraphicname {example} / '$ <| \
sed 's / ^ \\ end {document} / \\ endpgfgraphicname \\ end {document} /'> example.tex; \
        pdflatex --jobname = ví dụ example.tex; \
        gs -dNOPAUSE -r120 -dGraphicsAlphaBits = 4 -dTextAlphaBits = 4 -sDEVICE = png16m \
-sOutputFile = $ @ -dBATCH example.pdf; \
        convert -thumbnail 200 $ @ $ (addsuffix .thumb.png, $ (basename $ @)); \
        mv example.pdf $ (addsuffix .pdf, $ (basename $ <)); ví dụ rm. *

ghostview ( gs) có thể được thay thế bằng convertvà bạn có thể thay thế examplebằng một tiền tố tempfile khác.


2

Windows: Chỉ để hoàn toàn rõ ràng cho những người noobs như tôi

Sử dụng gói prewiew như Habi đã đề xuất ở trên trong mã cao su của bạn để loại bỏ lợi nhuận.

Cài đặt MIktex và Inkscape và sử dụng tệp bat sau:

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.