为什么这个使用“.is choice”的 pgfopts 示例不起作用?

为什么这个使用“.is choice”的 pgfopts 示例不起作用?

我正在尝试让这个简单的概念验证演示pgfopts工作,但结果总是不一致。我有另一个版本,其中的键由处理程序处理.is if,现在我正尝试使用该.is choice处理程序。我理解这一点.default,但.initial不会使用它.is choice

未指定任何键的默认值应为bold。加载未指定任何键的演示包会产生正确的结果(执行正确的代码,向量为粗体)。加载演示包时[vectors=arrowed]仍会给出粗体向量,并且两种代码选项都会执行。加载演示包时[vectors=bold]会给出粗体向量,但相应的代码会执行两次。我看不出是什么导致了这个问题。

这是演示pgfoptspkgtwo.sty文件。

\ProvidesPackage{pgfoptspkgtwo}
\RequirePackage[math-style=ISO]{unicode-math}
\setmathfont{Latin Modern Math}
\RequirePackage{pgfopts}

\pgfkeys{%
  /pgfoptspkgtwo/.cd,
  vectors/.is choice,
%  vectors/.default = bold, % won't work with .is choice
%  vectors/.initial = bold, % won't work with .is choice
  vectors/bold/.code={%
                       \typeout{}%
                       \typeout{pgfoptspkgtwo: You'll get bold vectors.}%
                       \typeout{}%
                       \renewcommand{\vec}{\symbfit}%
                     },
  vectors/arrowed/.code={%
                          \typeout{}%
                          \typeout{pgfoptspkgtwo: You'll get arrowed vectors.}%
                          \typeout{}%
                     },
 vectors=bold % this should be the default
}%

\ProcessPgfPackageOptions{/pgfoptspkgtwo}

这是演示文档pgfoptstestingtwo.tex

% !TEX TS-program = lualatexmk
% !TEX encoding = UTF-8 Unicode

\documentclass{article}
\usepackage{pgfoptspkgtwo}
%\usepackage[vectors=arrowed]{pgfoptspkgtwo}
%\usepackage[vectors=bold]{pgfoptspkgtwo}
\begin{document}

\[
  \vec{E}
\]
\end{document}

答案1

您无条件地将 重新定义\vec\symbfit,因为您的arrowed选择除了打印信息之外没有做任何其他事情。

\ProvidesPackage{pgfoptspkgtwo}
\RequirePackage[math-style=ISO]{unicode-math}
\setmathfont{Latin Modern Math}
\RequirePackage{pgfopts}

\pgfkeys{%
  /pgfoptspkgtwo/.cd,
  vectors/.is choice,
  vectors/bold/.code={%
                       \typeout{}%
                       \typeout{pgfoptspkgtwo: You'll get bold vectors.}%
                       \typeout{}%
                       \renewcommand{\vec}{\symbfit}%
                     },
  vectors/arrowed/.code={%
                          \typeout{}%
                          \typeout{pgfoptspkgtwo: You'll get arrowed vectors.}%
                          \typeout{}%
                          \renewcommand{\vec}{\standardvec}%
                     },
}%

\NewCommandCopy{\standardvec}{\vec}
\renewcommand{\vec}{\symbfit}
\ProcessPgfPackageOptions{/pgfoptspkgtwo}

相关内容