在为《光学快报》起草手稿时,我使用美国光学学会提供的模板,偶然发现了与 siunitx 软件包不兼容的问题。即:
\documentclass[10pt,letterpaper]{article}
\usepackage{opex3}
\usepackage{siunitx}
...
导致第 69 行出现错误:! Package siunitx Error: Unit \as already defined!.
,尽管原始文本文件的第 69 行没有 LaTeX 输入。显然,以不同的顺序输入包可以消除错误消息:
\usepackage{siunitx}
\usepackage{opex3}
...
因此,据我所知,\as
(attosecond) 命令肯定存在重复定义。为什么错误消息指示第 69 行出现错误,而错误似乎发生在文档的序言中?但是,为什么在交换包定义时不会发生错误?
(在 Ubuntu 12.04 上安装 Texmaker 并使用 pdfTeX,版本 3.1415926-1.40.10)
答案1
使用旧版本的siunitx
标准设置尝试创建缩写单元宏,但现有定义会导致问题。opex3
提供的定义\as
是快捷 方式Appl.\ Spectrosc.\
,问题就出在这里。(是的,快捷方式末尾有一个空格:不是一个好计划!)
错误只发生在一个加载顺序中,并给出“有趣”的行引用,这是由于单元的创建方式造成的。在版本 1 中,siunitx
有一个文件si-abbr.cfg
在第 69 行有定义
\newunit{\as}{\atto\second}
当您opex3
先加载时,\newunit
命令会检查是否存在\as
,如果发现存在,则会发出错误。另一方面,如果您siunitx
先加载,则没有定义,\as
因此siunitx
只需创建一个。中的代码opex3
不进行检查,因此会覆盖该siunitx
代码。
最好的“解决方案”取决于您的要求:
只需先加载
siunitx
您已经找到的内容:这将覆盖\as
版本opex3
使用以下命令关闭缩写文件的加载
\usepackage[noload=abbr]{siunitx}
opex
删除给出的定义\as
\usepackage{opex3} \let\as\relax
siunitx
从 CTAN安装 v2 (需要l3packages
和l3kernel
):这是最好的“长期”解决方案,但可能是最棘手的,所以如果您的唯一要求是问题中概述的要求,也许不要这样做!