宏包冲突

! LaTeX Error: Option clash for package X 表示同一个包被用不同选项加载了两次。通常是因为在你的 \usepackage 之前,别的类或包已经加载了 X(且没有你的选项)。一个包只能加载一次

为什么会发生

包只会加载一次。因此,如果你的 \usepackage[opt]{X} 出现在 X 已经被加载之后(由文档类、另一个包,或更早的不同选项 \usepackage{X} 加载),选项就会冲突,形成 “Option clash”。典型例子是:某个包先无选项加载了 xcolor,然后你又写了 \usepackage[table]{xcolor}

解决方法

  • 在 X 被加载之前\PassOptionsToPackage{opt}{X}(导言区最开头,或在会引入 X 的包之前),这样选项会在首次加载时生效。
  • 把同一包合并为一次带齐所有选项的 \usepackage,并放在任何自动加载它的内容之前
  • 调整加载顺序:先加载你需要带选项的包,再加载会引入它的包。
latex
% X が読まれる前に(プリアンブル冒頭)/ before X loads, at the very top
\PassOptionsToPackage{table}{xcolor}
\documentclass{article}
% 以降どこかで \usepackage{xcolor} されても table が効く
% (table applies even if something else loads xcolor later)

其他冲突

除了选项冲突,包之间还可能因为重新定义同一内容而不兼容。例如 hyperref 容易与许多包相互影响,通常应尽量靠后加载。按照各包 README 和日志提示,调整加载顺序或兼容选项。