Resolução

Resolução

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.pdfpara 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 pgfacessar a caixa de imagem, antes de ser composta. No início de \pgfsys@typesetpicturebox, a caixa da imagem \pgfpictem 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}

Resultado

O .logarquivo contém o fator de escala calculado: 4,22034

informação relacionada