Ao exportar uma imagem tikz para seu próprio arquivo PDF para publicações, desejo poder especificar o tamanho e a resolução exatos do arquivo PDF exportado. Especificamente imagens com 8,5 cm de largura e 600 dpi.
MWE:
\documentclass[12pt]{standalone}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric,arrows.meta,external}
\tikzexternalize
\begin{document}
\resizebox{8.5cm}{!}{
\begin{tikzpicture}
%some drawing here
\end{tikzpicture}
}
\end{document}
Em seguida, use pdflatex -shell-escape TikzFigure.pdf
para criar a figura.
Responder1
Resolução
TikZ é por natureza um sistema gráfico vetorial e o arquivo PDF gerado mantém esta propriedade. Claro, imagens bitmap podem ser incluídas e usadas nos gráficos TikZ. Mas o TeX não é um programa com capacidade de processamento de imagens. Ele só pode incluir imagens bitmap e fazer algumas transformações (por exemplo, dimensionar, girar). Mas não pode alterar os dados da imagem. Portanto, a resolução da imagem não pode ser alterada.
Dimensionar para largura final
Os seguintes hacks internos para pgf
acessar a caixa de imagem, antes de ser composta. No início de \pgfsys@typesetpicturebox
, a caixa da imagem \pgfpic
tem tamanho zero e a origem da imagem é o ponto de referência da caixa. As dimensões da imagem são fornecidas por outros registros \pgf@picminx
, \pgfpicminy
, ... Eles podem ser usados para calcular o real e depois o fator de escala. A caixa é então redimensionada pelo fator de escala e os registros são atualizados de acordo com o fator de escala.
Exemplo:
\documentclass[12pt]{standalone}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric,arrows.meta,external}
\usepackage{etoolbox}
\tikzexternalize
\makeatletter
\newcommand*{\set@picwidth}[1]{%
\edef\RequestedPicWidth{\the\dimexpr(#1)}%
\edef\ActualPicWidth{\the\dimexpr\pgf@picmaxx-\pgf@picminx}%
\ifx\RequestedPicWidth\ActualPicWidth
\else
\ifdim\ActualPicWidth>\z@
\pgfmathsetmacro\ScaleFactor{\RequestedPicWidth/\ActualPicWidth}%
\typeout{* Scale factor: \ScaleFactor}%
\setbox\pgfpic=\hbox{%
\scalebox{\ScaleFactor}{\box\pgfpic}%
}%
\pgf@picminx=\ScaleFactor\pgf@picminx
\pgf@picmaxx=\ScaleFactor\pgf@picmaxx
\pgf@picminy=\ScaleFactor\pgf@picminy
\pgf@picmaxy=\ScaleFactor\pgf@picmaxy
\pgf@shift@baseline=\ScaleFactor\pgf@shift@baseline
\pgf@trimleft@final=\ScaleFactor\pgf@trimleft@final
\pgf@trimright@final=\ScaleFactor\pgf@trimright@final
\else
\errmessage{The actual picture width (\ActualPicWidth) is not positive.}%
\fi
\fi
}
\newenvironment{picwidth}[1]{%
\pretocmd\pgfsys@typesetpicturebox{\set@picwidth{#1}}{}{%
\errmessage{Patching \noexpand\pgfsys@typesetpicturebox failed!}%
}%
\ignorespaces
}{%
\ignorespacesafterend
}
\makeatother
\begin{document}
\begin{picwidth}{8.5cm}
\begin{tikzpicture}
\draw (0, 0) circle[radius=1] node{Hello};
\end{tikzpicture}%
\end{picwidth}
\end{document}
O .log
arquivo contém o fator de escala calculado: 4,22034