我定义了一个命令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 即可产生所需的结果。