CTeX-org / ctex-kit

Macro Packages and Scripts for Chinese TeX users
980 stars 124 forks source link

newtx 宏包与 ctex 冲突 (fontspec 宏包选项冲突) #689

Closed NemoYuan2008 closed 9 months ago

NemoYuan2008 commented 9 months ago

这是 newtx 宏包的问题,但是 newtx 的作者没有回复邮件,因此我想请教一下 ctex 这边有没有很好的解决办法

最新版newtx 宏包(通过 tlmgr 更新,版本1.732, Nov 6 2023)与 ctex 冲突,以下是一个 MWE

\documentclass{ctexart}
\usepackage{newtxtext}

\begin{document}

Hello, 你好.

\end{document}

用 XeLaTeX 编译得到以下错误

LaTeX Error: Option clash for package fontspec.

但我在 Overleaf 上编译 (项目链接) 就没关系,我用老版的 TeX Live 2022 编译,也没问题。看起来应该是最新版的 newtx 宏包的 bug.

但是我给 newtx 宏包的作者发邮件没有得到回复,我在 stackexchange 上提问得到的解决方法是

\PassOptionsToPackage{no-math}{fontspec}
\documentclass{ctexart}
\usepackage{newtxtext}

\begin{document}

Hello, 你好.

\end{document}

这能暂时解决问题,但是我现在在写一个模板方便其他人用,不知道这样做是否稳定。另一方面在 \documentclass 前面加上命令感觉也不优雅。请问一下有没有 native 的 ctex 解决办法?

muzimuzhi commented 9 months ago

用 XeLaTeX 编译得到以下错误

LaTeX Error: Option clash for package fontspec.

.log 文件里,完整的报错信息是

! LaTeX Error: Option clash for package fontspec.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.245   \ifluatex
                   % avoid possibly uncorrected "system" fonts
The package fontspec has already been loaded with options:
  []
There has now been an attempt to load it with options
  [no-math]
Adding the global options:
  ,no-math
to your \documentclass declaration may fix this.
Try typing  <return>  to proceed.

这能暂时解决问题,但是我现在在写一个模板方便其他人用,不知道这样做是否稳定。另一方面在 \documentclass 前面加上命令感觉也不优雅。

这么做是稳定的。在 .cls 文件里,你可以使用

\PassOptionsToPackage{no-math}{fontspec}
\LoadClass{ctexart}

或者

\RequirePackage[no-math]{fontspec}
\LoadClass{ctexart}

这样你的 .cls 的用户就不需要在 \documentclass 之前写 \PassOptionsToPackage 这一行了。

NemoYuan2008 commented 9 months ago

非常感谢您的回复,问题已解决!