我正在尝试让这个简单的概念验证演示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}