Чи можна витягти діаграми TikZ як файли зображень? [зачинено]


81

Я використовую TikZ для малювання діаграм у LaTeX, які потім хочу виділити як файли зображень для розміщення в Інтернеті. Я використовую TeXnicCenter для редагування джерел.

Чи є спосіб витягти ці схеми безпосередньо, не витягуючи їх із готового файлу PDF?


1
Я використовую програму під назвою CirKuit, яка виконує функції редактора TikZ і дозволяє зберігати діаграму як будь-який з різних форматів зображень. Я думаю, що це робить за лаштунками, це використання латексу та dvitopng або щось подібне. Я розміщу відповідь, якщо зможу дізнатись деталі, перш ніж хтось інший щось опублікує.
David Z

1
Ви хочете автоматично ізолювати схеми від тексту, або ви раді вирізати та вставити код TikZ?
Чарльз Стюарт,

2
Див. Також Складіть документ LaTeX у якомога коротше зображення PNG та інші запитання, пов’язані з ним.
Мартін Шаррер,

Відповіді:


29

Продовжуючи мій коментар: Cirkuit перетворює діаграми TikZ у зображення, виконуючи щось на зразок наступної послідовності команд:

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

Ось img.texфайл LaTeX, який слід за цим шаблоном:

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

Якщо ви можете скористатися Cirkuit або подібним редактором, або написати сценарій для себе, щоб розмістити свою діаграму в цьому шаблоні та запустити відповідні інструменти, у вас буде швидкий спосіб перетворити код TikZ у зображення PNG.

Щоб відповісти на ваше запитання прямо ... ні, я не знаю жодного способу перетворити діаграму TikZ безпосередньо в PNG, не проходячи на певному етапі файл PDF (або принаймні DVI).


Дякую! Все, чого я хотів уникнути, - це вручну ізолювати діаграми, тому це повинно спрацювати нормально.
Qiaochu Yuan

66

Я б рекомендував наступний підхід. Помістіть розглянуте зображення TikZ в окремий файл і використовуйте standaloneклас, щоб скомпілювати його самостійно. Він використовує previewпакет, згаданий в інших відповідях. Щоб включити зображення в основний документ, завантажте там спочатку standalone пакет, а потім скористайтеся \inputкомандою у файлі зображення.

Це дозволить отримати один PDF-файл зображення TikZ без полів. Тоді ви можете скористатися, скажімо, перетворювачем PDF у PNG, щоб отримати PNG (рекомендується для веб-публікації малюнків). Формат SVG був би приємнішим, оскільки це векторний формат, але не всі браузери можуть його відображати.

Ось приклад коду. Файл зображення TikZ (наприклад, 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}

Основний документ:

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

Потім скомпілюйте зображення та перетворіть його, наприклад, за допомогою ImageMagick:

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

або спробуйте SVG:

convert pic.pdf pic.svg

Я виявив, що pdf2svg є більш надійним інструментом для перетворення PDF у SVG, ніж imagemagick.
Glutanimate

1
@Glutanimate: Тим часом я почав використовувати inkscapeдля цього.
Martin Scharrer

@MartinScharrer Мені вдалося вбудувати pdf-файл у батьківський документ, не перетворюючи його у png або svg: \ includegraphics {ім'я_файла.pdf}
user4035

@ user4035: Звичайно, це звичайний спосіб включення PDF-файлів у ваш (pdf) документ LaTeX. Однак це питання стосується того, як отримати схеми як файли растрових зображень, щоб вони могли відображатися в Інтернеті.
Мартін Шаррер,

11

Дивіться розділ керівництва TikZ “Екстерналізація графіки”. Це дозволяє робити версії графіки у форматі EPS або PDF. Я використовую файли EPS, перетворюю їх у TIFF, а потім можу зберігати їх куди завгодно.


Станом на 2013 рік, я вважаю, що це, мабуть, найкращий підхід.
Alex Hirzel,

У 2017 році це розділ 50.4 (сторінка 607) pgfmanual. Здається, ми не можемо дати посилання на веб-сторінку розділу (це лише у форматі PDF). :(
Ярослав Нікітенко

Теоретично це працює добре. На практиці, після довгого використання tikzexternalize, я повернувся до самостійного підходу, тому що, здається, простіше змусити його працювати. У мене було трохи клопоту з tikzexternalize.
jhin

7

Я зазвичай використовую щось у таких напрямках:

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

Створений pdf-файл містить автономне зображення TikZ. Щоб перетворити його в будь-який інший формат файлу, просто відкрийте його за допомогою Gimp.


2

Я використовую це для створення правила Makefile для створення файлів PNG та ескізів із файлів .tex, які містять по одній tikzpicture кожен. Це працює подібно до створення зображень на TeXample.net :

% .png:% .tex
        @sed 's / ^ \\ begin {документ} / \
\\ pgfrealjobname {фіктивний} \\ початок {документ} \\ beginpgfgraphicnamed {приклад} / '$ <| \
sed 's / ^ \\ end {document} / \\ endpgfgraphicnamed \\ end {document} /'> example.tex; \
        pdflatex --jobname = приклад example.tex; \
        gs -dNOPAUSE -r120 -dGraphicsAlphaBits = 4 -dTextAlphaBits = 4 -sDEVICE = png16m \
-sOutputFile = $ @ -dBATCH example.pdf; \
        конвертувати-мініатюру 200 $ @ $ (addsuffix .thumb.png, $ (базове ім'я $ @)); \
        mv example.pdf $ (addsuffix .pdf, $ (базове ім'я $ <)); приклад rm. *

ghostview ( gs), можливо, можна замінити, convertа ви можете замінити exampleіншим префіксом tempfile.


2

Windows: Просто для того, щоб бути повністю явним для таких нобів, як я

Використовуйте пакет prewiew, як запропонував Хабі у наведеному вище, у вашому латексному коді, щоб видалити поля.

Встановіть MIktex та Inkscape та використовуйте такий файл 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.