解決

解決

將 tikzpicture 匯出到自己的 pdf 檔案以供出版物時,我希望能夠指定匯出的 pdf 檔案的確切大小和解析度。特別是 8.5 公分寬和 600 dpi 的圖像。

微量元素:

\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大小為零,圖片的原點是框的參考點。圖片的尺寸由其他暫存器提供\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

相關內容