LINUX.ORG.RU

Вставка картинки в latex без существенной потери качества

 , ,


0

1

В документ вставляется картинка PGFPlots. Допустим, такая как здесь, одна из первых 10-ти.

К сожалению, я не могу модифицировать шаблон преамбулы документа. А значит, я, видимо, должен бы вставить рисунок из PDF или PNG например. Но мне нужно идеальное качество картинки. Если я сделаю скрин моего документа и вставлю полученное, то это будет мыльно выглядеть.

Наилучшее на данный момент решение было предложено Eddy, но оно предполагает джипеги или другие подобные форматы.

В общем задача состоит в том, чтобы из моего документа в pgfplots выдрать эту картинку в отдельный PDF, а потом его вставить как обычную figure. Как это сделать?

Deleted

Сделай минимально необходимый latex-документ pic.tex, куда включаешь нужный код, скажи в начале \pagestyle{empty}, далее выполни:

> latex pic.tex 
> dvips -E pic.dvi -o pic.eps 
> epstopdf  pic.pdf

Evgueni ★★★★★ ()
Последнее исправление: Evgueni (всего исправлений: 1)
Ответ на: комментарий от Evgueni

Ух ты! dvips в 2016 году! Не получится так, увы. То есть PDF, конечно же, получится. И вполне себе векторный. Но поля у него будут большие-пребольшие.

TeopeTuK ★★★ ()
Последнее исправление: TeopeTuK (всего исправлений: 1)

Про минимальный документ, это тебе Evgueni разумно посоветовал. Вот такой, например (для какого-то из тех примеров) pix.tex:

\documentclass{article}
\usepackage{pgfplots}
\usepackage[paperheight=82mm,paperwidth=110mm,margin=1mm]{geometry}
\begin{document}
\thispagestyle{empty}
\begin{tikzpicture}
	\begin{axis}[
		height=9cm,
		width=9cm,
		grid=major,
	]
		
	\addplot {-x^5 - 242};
	\addlegendentry{model}

	\addplot coordinates {
		(-4.77778,2027.60977)
		(-3.55556,347.84069)
		(-2.33333,22.58953)
		(-1.11111,-493.50066)
		(0.11111,46.66082)
		(1.33333,-205.56286)
		(2.55556,-341.40638)
		(3.77778,-1169.24780)
		(5.00000,-3269.56775)
	};
	\addlegendentry{estimate}
	\end{axis}
\end{tikzpicture}
\end{document}
К сожалению, я не знаю, как автоматически подобрать размер листа бумаги, чтобы полученный PDF-файл можно было безболезненно вставлять в твой основной документ. Так что эти 82mm и 110mm это вручную.

А так:

pdflatex pix.tex
и вставляй полученный pix.pdf в твой документ. graphicx там подключен, я надеюсь?

TeopeTuK ★★★ ()

По-моему это делается как-то так, например:

\documentclass[a4paper, 12pt]{extarticle} \usepackage[T2A]{fontenc} \usepackage[cp1251]{inputenc} \usepackage[english,russian]{babel} \usepackage[pdftex]{graphicx} \usepackage{pgf} \usepackage{pgfplots} \usepackage{tikz} \pgfplotsset{compat=1.10} \usepgfplotslibrary{external} \tikzset{external/system call={pdflatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname «\image» «\texsource» && % or ; pdftops -eps «\image».pdf}} \tikzexternalize

\begin{document}

\begin{tikzpicture} \begin{axis}[ xmin=-3, xmax=3, ymin=-3, ymax=3, extra x ticks={-1,1}, extra y ticks={-2,2}, extra tick style={grid=major}, ] \draw[red] \pgfextra{ \pgfpathellipse{\pgfplotspointaxisxy{0}{0}} {\pgfplotspointaxisdirectionxy{1}{0}} {\pgfplotspointaxisdirectionxy{0}{2}} }; \draw[blue] \pgfextra{ \pgfpathellipse{\pgfplotspointaxisxy{0}{0}} {\pgfplotspointaxisdirectionxy{1}{1}} {\pgfplotspointaxisdirectionxy{0}{2}} }; \addplot [only marks,mark=*] coordinates { (0,0) }; \end{axis} \end{tikzpicture}

\end{document}

И pdflatex.exe -shell-escape -synctex=1 -interaction=nonstopmode doc_name.tex

anonymous ()
Ответ на: комментарий от anonymous

По-моему это делается как-то так, например:

\documentclass[a4paper, 12pt]{extarticle}
\usepackage[T2A]{fontenc}
\usepackage[cp1251]{inputenc}
\usepackage[english,russian]{babel}
\usepackage[pdftex]{graphicx}
\usepackage{pgf}
\usepackage{pgfplots}
\usepackage{tikz}
\pgfplotsset{compat=1.10}
\usepgfplotslibrary{external}
\tikzset{external/system call={pdflatex \tikzexternalcheckshellescape -halt-on-error 
		-interaction=batchmode -jobname "\image" "\texsource" && % or ;
		pdftops -eps "\image".pdf}}
\tikzexternalize

\begin{document}

\begin{tikzpicture}
\begin{axis}[
	xmin=-3,   xmax=3,
	ymin=-3,   ymax=3,
	extra x ticks={-1,1},
	extra y ticks={-2,2},
	extra tick style={grid=major},
]
	\draw[red] \pgfextra{
	  \pgfpathellipse{\pgfplotspointaxisxy{0}{0}}
		{\pgfplotspointaxisdirectionxy{1}{0}}
		{\pgfplotspointaxisdirectionxy{0}{2}}
	 
	};
	\draw[blue] \pgfextra{
	  \pgfpathellipse{\pgfplotspointaxisxy{0}{0}}
		{\pgfplotspointaxisdirectionxy{1}{1}}
		{\pgfplotspointaxisdirectionxy{0}{2}}
	};
	\addplot [only marks,mark=*] coordinates { (0,0) };
\end{axis}
\end{tikzpicture}

\end{document}

И далее: pdflatex.exe -shell-escape -synctex=1 -interaction=nonstopmode doc_name.tex

anonymous ()
Ответ на: комментарий от anonymous

Спасибо! Оптимальное решение было найдено здесь. При написании итоговой версии придется убрать всё лишнее. Задача решена.

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Evgueni

Да, спасибо, тоже рабочий вариант. Я планировал то, что выше.

Deleted ()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от TeopeTuK

Ключик -E как раз для этого. Ну и в отличии от pdf, eps можно ручками поредактировать.

Evgueni ★★★★★ ()
Последнее исправление: Evgueni (всего исправлений: 1)
Ответ на: комментарий от Evgueni

Да, я был невнимателен и не заметил ключ -E. Но руками редактировать — зачем? Руками редактировать нужно исходный текст. Если редактировать EPS руками, то при изменении рисунка придется опять руками редактировать, и опять... Бррр.

TeopeTuK ★★★ ()

Ещё можно сделать через стиль standalone Я делаю так:

\documentclass[varwidth=true,border=4pt]{standalone}
% вставить необходимую преамбулу!
\usepackage{mathtext}
\usepackage[T2A]{fontenc}
\usepackage[koi8-r]{inputenc}
\usepackage[russian]{babel}
\usepackage[pdftex]{graphics}
% подключаем TikZ
\usepackage{tikz}
\usepackage{gnuplot-lua-tikz}
% ещё пакеты ...

\begin{document}


\usetikzlibrary{arrows}
\usetikzlibrary{patterns}
% ещё библиотеки ...

% сюда вставляем код tikz в окужении tikzpicture

\end{document}

Потом компилируем всё при помощи pdflatex и вставляем при помощи \includegraphics{}. У меня есть также скрипт, который автоматически оборачивает код TikZ в такую конструкцию и конвертирует рисунки в PDF.

DarthVadimius ★★ ()
Ответ на: комментарий от Evgueni

PDF можно отредактировать руками, открыв его Inkscape'ом. Иногда бывает нужно. Точно также и EPS.

DarthVadimius ★★ ()
Ответ на: комментарий от DarthVadimius

Не всегда Inkscape доступен, как и исходники. Жизнь всякая случается.

Evgueni ★★★★★ ()
Ответ на: комментарий от DarthVadimius

standalone

+1.

Pi_Montecarlo.tex:

\documentclass[tikz]{standalone}
\usepackage[utf8]{inputenc}
\usepackage[T2A]{fontenc}
\usepackage[russian]{babel}
\def\numpoints{400}
\def\width{3.0}
\begin{document}

\begin{tikzpicture}
\fill[blue!10!white] (0,0) -- (\width,0) arc (0:-270:\width cm) -- cycle;
\fill[green!10!white] (0,0) -- (\width,0) arc (0:90:\width cm) -- cycle;
\fill[red!10!white] (\width,\width) -- (\width,0) arc (0:90:\width cm) -- cycle;
\draw[thick, ->] (-1.2*\width,0) -- (1.2*\width,0);
\draw[very thick] (\width,-0.1)--(\width,0.1);
\draw[very thick] (-\width,-0.1)--(-\width,0.1);
\node[anchor=north west] () at (\width,0) {$1$};
\node[anchor=north east] () at (-\width,0) {$-1$};
\draw[thick, ->] (0,-1.2*\width) -- (0,1.2*\width);
\draw[very thick] (-0.1,\width)--(0.1,\width);
\draw[very thick] (-0.1,-\width)--(0.1,-\width);
\node[anchor=south east] () at (0,\width) {$1$};
\node[anchor=north east] () at (0,-\width) {$-1$};
\draw[very thin] (0,0) circle (\width cm);
\draw[very thin] (\width,0) -- (\width,\width) -- (0,\width);
\foreach \point in {1,...,\numpoints}{
  \pgfmathparse{random()}
  \pgfmathsetmacro\xpos{\pgfmathresult}
  \pgfmathparse{random()}
  \pgfmathsetmacro\ypos{\pgfmathresult}
  \pgfmathsetmacro\checkdistance{ (\xpos)^2 + (\ypos)^2 }
  \ifdim\checkdistance pt< 1.001pt
    \fill[green!50!black]  (\width*\xpos,\width*\ypos) circle (0.75pt) ;
  \else
    \fill[red!50!black]  (\width*\xpos,\width*\ypos) circle (0.75pt) ;
  \fi
}
\end{tikzpicture}

\end{document}

main.tex:

\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T2A]{fontenc}
\usepackage[russian]{babel}

\usepackage{graphicx}
\usepackage{lipsum}

\begin{document}

\lipsum[1]

\begin{figure}[h]
  \centering
  \includegraphics{Pi_Montecarlo}
  \caption{Применение метода Монте-Карло для нахождения числа Пи}
\end{figure}

\lipsum[2]

\end{document} 
AlexVR ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.