解決

解決

tikzpicture を出版物用の独自の pdf ファイルにエクスポートする場合、エクスポートした pdf ファイルの正確なサイズと解像度を指定できるようにしたいと考えています。具体的には、幅 8.5 cm、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}

次に、 を使用してpdflatex -shell-escape TikzFigure.pdf図を作成します。

答え1

解決

TikZ は本質的にベクター グラフィック システムであり、生成された PDF ファイルでもこの​​特性が維持されます。もちろん、ビットマップ イメージを TikZ グラフィックに含めて使用することもできます。ただし、TeX はイメージ処理機能を備えたプログラムではありません。ビットマップ イメージを含めて、いくつかの変換 (拡大縮小、回転など) を行うことしかできません。ただし、イメージ データを変更することはできません。したがって、イメージの解像度を変更することはできません。

最終的な幅にスケールする

次の例は、 の内部をハッキングしてpgf、タイプセットされる前に画像ボックスにアクセスします。 の始めでは\pgfsys@typesetpicturebox、画像ボックス\pgfpicのサイズは 0 で、画像の原点はボックスの参照点です。画像の寸法は、他のレジスタ\pgf@picminx\pgfpicminy、... によって提供されます。これらを使用して、実際の を計算し、次にスケール係数を計算することができます。次に、ボックスのサイズがスケール係数によって変更され、レジスタがスケール係数に従って更新されます。

例:

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

結果

ファイル.logには計算されたスケール係数が含まれています: 4.22034

関連情報