Автономные диаграммы с TikZ?
Я использую TikZ для рисования диаграмм в LaTeX, которые затем хочу выделить в виде файлов изображений для размещения в сети. Я предполагаю, что есть способ извлечь эти диаграммы напрямую, без необходимости выделять их из готового файла.pdf. Как бы я поступил так? (Если это имеет значение, я использую TeXnicCenter.)
6 ответов
В продолжение моего комментария: 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) на каком-то этапе.
Я бы порекомендовал следующий подход к вам. Поместите изображение tikz в отдельный файл и используйте автономный класс для его компиляции. Он использует пакет предварительного просмотра, упомянутый в других ответах. Чтобы включить изображение в основной документ, сначала загрузите там отдельный пакет и используйте \input для файла изображения.
Это позволит вам получить один PDF-файл с изображением тикза без полей. Затем вы можете использовать PDF-to- say 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 (например, под Linux):
pdflatex pic
convert -density 600x600 pic.pdf -quality 90 -resize 800x600 pic.png
или попробуйте SVG:
convert pic.pdf pic.svg
Смотрите раздел руководства Tikz "Внешняя графика". Это позволяет вам создавать версии графики в формате EPS или PDF. Я использую файлы EPS, преобразовываю их в файлы TIFF и могу помещать их туда, где мне нужно.
Я обычно использую что-то вроде этого:
\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.
Я использую это, чтобы правило Makefile создавало PNG-файлы и миниатюры из.tex-файлов, содержащих по одному tikzpicture в каждом. Работает аналогично созданию изображений на 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=example example.tex; \ gs -dNOPAUSE -r120 -dGraphicsAlphaBits=4 -dTextAlphaBits=4 -sDEVICE=png16m \ -sOutputFile=$@ -dBATCH example.pdf; \ convert -thumbnail 200 $@ $(добавочный суффикс.thumb.png, $(базовое имя $@)); \ mv example.pdf $(добавочный суффикс.pdf, $(базовое имя $<)); Пример рм. *
призрак (gs
) может быть заменен convert
и вы можете заменить example
с другим префиксом временного файла.
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