Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ctex: 与 amsmath 的兼容性问题 #470

Closed
stone-zeng opened this issue Dec 2, 2019 · 13 comments
Closed

ctex: 与 amsmath 的兼容性问题 #470

stone-zeng opened this issue Dec 2, 2019 · 13 comments

Comments

@stone-zeng
Copy link
Member

stone-zeng commented Dec 2, 2019

\documentclass{ctexart}
\usepackage{amsmath}
\begin{document}
\begin{align}
  \hat{\epsilon}
\end{align}
\end{document}

会出现以下报错信息:

! Package amsmath Error: \hat allowed only in math mode.

See the amsmath package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.6 \end{align}
               
? 

仅在 xelatex 出现,其他引擎没有这个问题。

版本信息:

 ctexart.cls    2019/05/29 v2.4.16 Chinese adapter for class article (CTEX)
   expl3.sty    2019-11-07 L3 programming layer (loader) 
expl3-code.tex    2019-11-07 L3 programming layer 
l3deprecation.def    2019-04-06 v L3 Deprecated functions
l3backend-xdvipdfmx.def    2019-04-06 L3 backend support: xdvipdfmx
  xparse.sty    2019-10-11 L3 Experimental document command parser
l3keys2e.sty    2019-10-11 LaTeX2e option processing using LaTeX3 keys
ctexhook.sty    2019/05/29 v2.4.16 Document and package hooks (CTEX)
ctexpatch.sty    2019/05/29 v2.4.16 Patching commands (CTEX)
  fix-cm.sty    2015/01/14 v1.1t fixes to LaTeX
  ts1enc.def    2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file
everysel.sty    2011/10/28 v1.2 EverySelectfont Package (MS)
ctexopts.cfg    2019/05/29 v2.4.16 Option configuration file (CTEX)
 article.cls    2019/10/25 v1.4k Standard LaTeX document class
  size10.clo    2019/10/25 v1.4k Standard LaTeX file (size option)
ctex-engine-xetex.def    2019/05/29 v2.4.16 XeLaTeX adapter (CTEX)
   xeCJK.sty    2019/06/02 v3.7.4 Typesetting CJK scripts with XeLaTeX
xtemplate.sty    2019-10-11 L3 Experimental prototype document functions
fontspec.sty    2019/10/19 v2.7d Font selection for XeLaTeX and LuaLaTeX
fontspec-xetex.sty    2019/10/19 v2.7d Font selection for XeLaTeX and LuaLaTeX
 fontenc.sty
   tuenc.def    2018/08/11 v2.0j Standard LaTeX file
fontspec.cfg
   xeCJK.cfg    2019/06/02 v3.7.4 Configuration file for xeCJK package
xeCJKfntef.sty    2019/06/02 v3.7.4 xeCJK font effect
    ulem.sty    2012/05/18
CJKfntef.sty    2015/04/18 4.8.4
zhnumber.sty    2019/04/07 v2.7 Typesetting numbers with Chinese glyphs
zhnumber-utf8.cfg    2019/04/07 v2.7 Chinese numerals with UTF8 encoding
ctex-scheme-chinese-article.def    2019/05/29 v2.4.16 Chinese scheme for article (CTEX)
ctex-name-utf8.cfg    2019/05/29 v2.4.16 Caption with encoding UTF8 (CTEX)
ctex-c5size.clo    2019/05/29 v2.4.16 c5size option (CTEX)
ctex-fontset-fandol.def    2019/05/29 v2.4.16 Fandol fonts definition (CTEX)
    ctex.cfg    2019/05/29 v2.4.16 Configuration file (CTEX)
 amsmath.sty    2019/11/16 v2.17d AMS math features
 amstext.sty    2000/06/29 v2.01 AMS text
  amsgen.sty    1999/11/30 v2.0 generic functions
  amsbsy.sty    1999/11/29 v1.2d Bold Symbols
  amsopn.sty    2016/03/08 v2.02 operator names

环境:Ubuntu 18.04.3 LTS

@OsbertWang
Copy link

不用 align 环境而用 equation 环境不会复现问题,但改用 eqnarray 会复现问题。
环境为 win 10,编译命令为 xelatex

@stone-zeng
Copy link
Member Author

检查后发现又是一个 ulem 包的锅了:

\documentclass{article}
\usepackage{fontspec}
\usepackage{ulem}
\usepackage{amsmath}
\begin{document}
\begin{align}
  \hat{\epsilon}
\end{align}
\end{document}

fontspec 加上 no-math 选项可以解决。

@stone-zeng stone-zeng added this to the ctex 2.5 milestone Dec 2, 2019
@OsbertWang
Copy link

借着这里,表明个态度: 支持将 xeCJKfnter 摘出去独立做包让用户进行调用。
最近已经看到太多人问类似问题了……

@zepinglee
Copy link
Member

顺便把 repo 拆一波?好像我鸽了好久了

@muzimuzhi
Copy link
Contributor

借着这里,表明个态度: 支持将 xeCJKfnter 摘出去独立做包让用户进行调用。
最近已经看到太多人问类似问题了……

相关 issue:#463, #449

@sjx95
Copy link

sjx95 commented Dec 26, 2019

我也刚刚遇见了这个问题,我对 TeX 不太熟不敢乱动模板的 fontspec,不过我发现在 \begin{align} 后面紧跟一个无效的\label{nouse} 似乎可以临时解决问题?

感谢上文 dalao 提供的思路!

@stone-zeng
Copy link
Member Author

我发现在 \begin{align} 后面紧跟一个无效的\label{nouse} 似乎可以临时解决问题?

给个例子吧,也许又是一个坑呢。

@sjx95
Copy link

sjx95 commented Dec 26, 2019

\documentclass{ctexrep}
\usepackage{amsmath}
\usepackage{hyperref}
\usepackage{cleveref}
\begin{document}
	\begin{align}
		\label{GGa}\hat{a} \\
		\label{GGb}\hat{b}
	\end{align}
	
	公式 \cref{GGa} \autoref{GGb} 现在可以编译了。
\end{document}

@stone-zeng 来了,必须要载入 cleveref 宏包才行。

@stone-zeng
Copy link
Member Author

其实只要多一个分组就可以了……

\documentclass{article}
\usepackage{fontspec,ulem,amsmath}

\begin{document}
\begin{align}{}  % <-- 或者 \relex 或者 \
\hat{a}
\end{align}
\end{document}

这里实际上是因为 cleveref\label 重定义成了它自己版本的 \@gobble。LaTeX 的 \@gobble 就是 #1->{},因此被吃掉之后什么也不剩;而它这个判断了一下是不是跟着 ],就没办法被直接吃掉了。

当然,归根结底,看起来还是因为 ulem\MakeRobust 重定义了(真是城门失火,殃及池鱼)……

@sjx95
Copy link

sjx95 commented Dec 27, 2019

其实只要多一个分组就可以了……

\documentclass{article}
\usepackage{fontspec,ulem,amsmath}

\begin{document}
\begin{align}{}  % <-- 或者 \relex 或者 \
\hat{a}
\end{align}
\end{document}

这里实际上是因为 cleveref\label 重定义成了它自己版本的 \@gobble。LaTeX 的 \@gobble 就是 #1->{},因此被吃掉之后什么也不剩;而它这个判断了一下是不是跟着 ],就没办法被直接吃掉了。

当然,归根结底,看起来还是因为 ulem\MakeRobust 重定义了(真是城门失火,殃及池鱼)……

确实可以的,我先按这种方式把这坑绕过去好了。

@RuixiZhang42
Copy link
Member

其实只要多一个分组就可以了……

\documentclass{article}
\usepackage{fontspec,ulem,amsmath}

\begin{document}
\begin{align}{}  % <-- 或者 \relex 或者 \
\hat{a}
\end{align}
\end{document}

这里实际上是因为 cleveref\label 重定义成了它自己版本的 \@gobble。LaTeX 的 \@gobble 就是 #1->{},因此被吃掉之后什么也不剩;而它这个判断了一下是不是跟着 ],就没办法被直接吃掉了。

当然,归根结底,看起来还是因为 ulem\MakeRobust 重定义了(真是城门失火,殃及池鱼)……

只要 math accent 出现在 align 系列环境每一行之首就会报错(当然,是 ulem 包或者是别的没跟上 robustness 包的锅)。我一两周前赶 due,跑一份四个月前的文档也遇到了同样的问题(时间不足没空排查)。最好的临时解决方案应该是 \relax(阻止过度展开)。{} 会引入一个 mathord 从而影响 spacing,不太理想吧。

@RuixiZhang42
Copy link
Member

我在 TeX.SX 上提问了:https://tex.stackexchange.com/q/522138/164314

已经再次引起了 kernel 团队的注意,希望问题会在近期被解决。

@muzimuzhi
Copy link
Contributor

muzimuzhi commented Jan 14, 2020

检查后发现又是一个 ulem 包的锅了:

ulem 2019/11/18 已修复该问题,1 月 10 日 texlive 收录该更新。具体更新内容可见 revision 53365

问题已解决,关闭当前 issue。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants