Tikz 外部化创建带有重复图像的 pdf

Tikz 外部化创建带有重复图像的 pdf

我定义了一个命令masterTriangle来将使用 tikz 库创建的三角形内联。我在我的文档中多次使用此命令,这实际上是一本大书,因此我需要使用 tikzexternalize库。我看到了一些奇怪的行为,因为生成的 pdf 文件有 4 个三角形实例(编译的外部图形,而不是文档)。在我的实际文档中,编译整本书后,该三角形的实例超过 200 个。有人能解释为什么会发生这种情况吗?这是 MWE:

\documentclass{article}

\usepackage{scalerel} % assembly operator
\usepackage{tikz}
\usepackage{xspace}
\usepackage{scalerel}

\usetikzlibrary{external}
\tikzexternalize[prefix=./]

% define custom inline commands
\tikzset{
    masterTriangleImpl/.pic={
        \draw (0,0) -- (1,0) -- (0,1) -- cycle;
    }}
\def\masterTriangle{\scalerel*{\ensuremath{\;\tikzsetnextfilename{masterTriangle}\tikz[x=1em, y=1em, line width=1pt]\pic{masterTriangleImpl};}}{X\rule[-.35ex]{0pt}{1pt}}\xspace}

\begin{document}
This is my \masterTriangle and this is another \masterTriangle.
\end{document}

更新

按照@Qrrbrbirlbel的建议,我只是使用该pic2e包绘制三角形。这是我的解决方案:

\documentclass{article}
\usepackage{amsmath}
\usepackage{pict2e}
\usepackage{xspace}

\makeatletter
\newcommand{\masterTriangle}{\ensuremath{\mathbin{\mathpalette\masterTriangle@\relax}}\xspace}
\newcommand{\masterTriangle@}[2]{%
  \begingroup
  \setlength{\dimen@}{\masterElement@width{#1}}%
  \sbox\z@{$\m@th#1\sqcup$}%
  \setlength{\unitlength}{\wd\z@}%
  \raisebox{0.5\dimen@}{%
    \begin{picture}(1,1)
    \linethickness{\dimen@}%
%    \roundcap\roundjoin
    \polygon(0.05,0.05)(0.95,0.05)(0.05,0.95)
    \end{picture}%
  }%
  \endgroup
}

\newcommand{\masterElement@width}[1]{%
  \ifx#1\displaystyle \fontdimen8\textfont\else
  \ifx#1\textstyle \fontdimen8\textfont\else
  \ifx#1\scriptstyle 1.1\fontdimen8\scriptfont\else
  1.25\fontdimen8\scriptscriptfont\fi\fi\fi 3
}

\makeatother

\begin{document}
This is my \masterTriangle and this is another $\masterTriangle$.
\end{document}

无需使用 tikz 即可产生所需的结果。

相关内容