使用 siunitx 包和 Optics Express 日志模板

使用 siunitx 包和 Optics Express 日志模板

在为《光学快报》起草手稿时,我使用美国光学学会提供的模板,偶然发现了与 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 (需要l3packagesl3kernel):这是最好的“长期”解决方案,但可能是最棘手的,所以如果您的唯一要求是问题中概述的要求,也许不要这样做!

相关内容