解决

解决

当将 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

相关内容