序列
\documentclass{amsbook}
\usepackage{pst-eucl}
\usepackage{prerex}
\begin{document}
\end{document}
生成“命令 \unit 已定义”错误。这两个包单独使用都没有问题。即使使用最大更新,MikTex 2.9 也不会出现此错误消息。但是,使用 MikTex 23.10 似乎会导致出现此问题。
最后,我能够使用以下步骤消除该问题。
\documentclass{amsbook}
\usepackage{savesym}
\usepackage{pst-eucl}
\savesymbol{unit}
\usepackage{prerex}
\restoresymbol{PREREX}{unit}
\begin{document}
\begin{chart}
\end{chart}
\end{document}
这让我跳过了序言。但是,第一次调用 prerex (\begin{chart}) 引发了新的错误“!missing number,treated as zero...\xparse not expandable ....1.8 \begin{chart}”。谢谢。
答案1
该prerex
包确实
\newlength{\unit}
这是导致错误的原因,再加上pst-eucl
加载了许多pstricks
相关子包,其中包括pst-calculate
加载的子包siunitx
,而这个子包定义了\unit
。
我认为这\unit
作为可调参数的名称prerex
不是一个好的选择。
由于prerex
也会加载hyperref
(我真的不知道为什么),因此应该尽可能晚地加载,并且可能会检查是否\unit
已定义,在这种情况下会提供不同的名称。代码可能是
\@ifundefined{unit}{%
\newlength{\unit}%
\let\prerex@unit\unit
}{%
\newlength{\prerexunit}%
\let\prerex@unit\prerexunit
\PackageWarning{prerex}{\protect\unit already defined, use \protect\prerexunit instead}
}
\unit
将软件包代码中的所有其他 改为\prerex@unit
。这样,使用 的用户代码prerex
将与以前一样工作,不会产生冲突。警告将告诉用户该怎么做。当然这是软件包维护者的工作。
暂时,如果您需要来自的命令,请先执行,\let\unit\relax
然后\usepackage{prerex}
使用。\si
\unit
siunitx