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的Lualatex or/+ MacOS15兼容性问题 #722

Open
xiaoyuleiba opened this issue Sep 23, 2024 · 29 comments
Open

ctex的Lualatex or/+ MacOS15兼容性问题 #722

xiaoyuleiba opened this issue Sep 23, 2024 · 29 comments

Comments

@xiaoyuleiba
Copy link

系统: MacOS 15.0
MacTeX: 2024版

1.log

复现最小例:

\documentclass{ctexart}
\begin{document}
1
\end{document}

好像之前没这个问题, 现在直接调用了 ctex-fontset-macold.def , 打开之后看到里面有一句

{macOS fonts definition for Yosemite or earlier version (CTEX)}

会不会跟这个有关系呢?

@muzimuzhi
Copy link
Contributor

log 里有一串找不到字体的 fontspec error,STKaiti, STHeiti, STSong 通通找不到/无法解析。

现在直接调用了 ctex-fontset-macold.def

新旧判断的依据是 /System/Library/Fonts/PingFang.ttc 文件是否存在:

ctex-kit/ctex/ctex.dtx

Lines 10814 to 10816 in 0fb196c

\file_if_exist:nTF { /System/Library/Fonts/PingFang.ttc }
{ \ctex_file_input:n { ctex-fontset-macnew.def } }
{ \ctex_file_input:n { ctex-fontset-macold.def } }

我还在 macOS 14,GitHub Actions 也还没提供 macOS 15,无法直接测试。你能查看/System/Library/Fonts/PingFang.ttc 这个文件是否存在吗?如果不存在,那么 Font Book.app 里,有 PingFang SC 字体吗(也许需要下载),有的话,对应的文件位置在哪?

比如 macOS 14.6.1 里,
image

@xiaoyuleiba
Copy link
Author

您好. 现在字体册里的pingfang港澳简繁4个都不显示位置. 但是自己下的字体, 以及一些别的自带字体 (Courier New) 都还是有显示文件位置.

截屏2024-09-24 2 08 26 截屏2024-09-24 2 09 09 截屏2024-09-24 2 13 21

@xiaoyuleiba
Copy link
Author

还有, 现在我的/System/Library/Fonts里是这样的, 可以作为一点参考.

fonts.log

@xiaoyuleiba
Copy link
Author

系统: MacOS 15.0 MacTeX: 2024版

1.log

复现最小例:

\documentclass{ctexart}
\begin{document}
1
\end{document}

好像之前没这个问题, 现在直接调用了 ctex-fontset-macold.def , 打开之后看到里面有一句

{macOS fonts definition for Yosemite or earlier version (CTEX)}

会不会跟这个有关系呢?

但是在xelatex下是没有任何问题的

@muzimuzhi
Copy link
Contributor

muzimuzhi commented Sep 23, 2024

但是在xelatex下是没有任何问题的

  • 如果 xelatex 下加载的也是 ...-macold.def,只是没有后续的报错,那在命令行执行
    sudo tlmgr conf texmf OSFONTDIR /System/Library/AssetsV2/com_apple_MobileAsset_Font7
    
    也许能让 lualatex 下的行为和 xelatex 一致。com_apple_MobileAsset_Font7 里的数字 7 可能变了,你可以在 AssetsV2 里搜 "otf" 判断现在的目录名
  • 如果 xelatex 下加载的是 ...-macnew.def,那就有点奇怪了。可以用 xelatex 和 lualatex 分别执行
    \documentclass{article}
    \begin{document}
    \ExplSyntaxOn
    \file_if_exist:nTF { /System/Library/Fonts/PingFang.ttc } TF
    \ExplSyntaxOff
    \end{document}
    再次确认一下(行为的不一致)

PingFang.ttc 新路径的问题,我白天应该能碰到 macOS 15 的机器。你可以先在 /System/Library/AssetsV2/com_apple_MobileAsset_Font7 或全盘试着找找看。

@muzimuzhi
Copy link
Contributor

muzimuzhi commented Sep 23, 2024

看起来在 macOS 15,苹方对应的字体名是 PingFangUI.ttc

更新 1:根据 https://gitlab.freedesktop.org/freetype/freetype/-/issues/1281 ,它可能在

/System/Library/PrivateFrameworks/FontServices.framework/Versions/A/Resources/Reserved/PingFangUI.ttc

那就 \documentclass[fontset=macnew]{ctexart} 先用着吧。

更新 2:根据 https://zhuanlan.zhihu.com/p/703590357 ,这个新的苹方字体用了新的字体格式,很可能 xe- 和 lua-latex 里都(暂且)无法使用。hmm

更新 3:

macOS Sequoia 的苹方使用了一种没见过的可变技术 (hvgl table) 来储存轮廓,还有另一个没见过的表 (cidg table),并且 FTXViewer 都不能读。
https://x.com/alpha_argon/status/1800432640820170757

@xiaoyuleiba
Copy link
Author

xiaoyuleiba commented Sep 23, 2024

刚刚的两个文件都是生成F.

看起来在 macOS 15,苹方对应的字体名是 PingFangUI.ttc

根据 https://gitlab.freedesktop.org/freetype/freetype/-/issues/1281 ,它可能在

/System/Library/PrivateFrameworks/FontServices.framework/Versions/A/Resources/Reserved/PingFangUI.ttc

那就 \documentclass[fontset=macnew]{ctexart} 先用着吧。

谢谢. 不过他们咋想的往那里塞了,,,

@xiaoyuleiba
Copy link
Author

不对, \documentclass[fontset=macnew]{ctexart}也还是报错

macnew.log

@xiaoyuleiba
Copy link
Author

不对, \documentclass[fontset=macnew]{ctexart}也还是报错

macnew.log

xelatex的log:
xelatex.log

@muzimuzhi
Copy link
Contributor

muzimuzhi commented Sep 23, 2024

看到已经有人从 PingFangUI.ttc 提取了单独的 otf 格式
dsrkafuu/dsr-blog#9 (comment)

根据 ACT-02/PingFang-for-Windows@fff349b ,在 macOS 15 beta 1 时,PingFangUI.ttc 在 /System/Library/AssetsV2/com_apple_MobileAsset_Font7/PingFang.ttc。

@xiaoyuleiba
Copy link
Author

xelatex用的不是new也不是old, 而是没有后缀的

xelatex_No_Option.log

@muzimuzhi
Copy link
Contributor

xelatex用的不是new也不是old, 而是没有后缀的

xelatex_No_Option.log

还是 old,你看 195 行

% xelatex_No_Option.log, lines 190-196
(/usr/local/texlive/2024/texmf-dist/tex/latex/ctex/fontset/ctex-fontset-mac.def
File: ctex-fontset-mac.def 2022/07/14 v2.5.10 macOS fonts definition (CTEX)

(/usr/local/texlive/2024/texmf-dist/tex/latex/ctex/fontset/ctex-fontset-macold.
def
File: ctex-fontset-macold.def 2022/07/14 v2.5.10 macOS fonts definition for Yos
emite or earlier version (CTEX)

@xiaoyuleiba
Copy link
Author

xelatex用的不是new也不是old, 而是没有后缀的
xelatex_No_Option.log

还是 old,你看 195 行

% xelatex_No_Option.log, lines 190-196
(/usr/local/texlive/2024/texmf-dist/tex/latex/ctex/fontset/ctex-fontset-mac.def
File: ctex-fontset-mac.def 2022/07/14 v2.5.10 macOS fonts definition (CTEX)

(/usr/local/texlive/2024/texmf-dist/tex/latex/ctex/fontset/ctex-fontset-macold.
def
File: ctex-fontset-macold.def 2022/07/14 v2.5.10 macOS fonts definition for Yos
emite or earlier version (CTEX)

还真是,瞟了一眼没细看,我的

@muzimuzhi
Copy link
Contributor

短期的方案,也许是找还在 macOS 14 的小伙伴(或各种镜像里)复制一个 PingFang.ttc。

中期,看起来 ctex 需要为 macOS 15 调整预设字体。

长期,希望(在苹果发布新格式的文档后),xetex 用的 fontconfig 和 luatex 用的 luaotfload 都能添加支持……

@xiaoyuleiba
Copy link
Author

根据 ACT-02/PingFang-for-Windows@fff349b ,在 macOS 15 beta 1 时,PingFangUI.ttc 在 /System/Library/AssetsV2/com_apple_MobileAsset_Font7/PingFang.ttc。

把这个抓出来单独安装, 提示已安装. 用sudo su -都不让往/System/Library/Fonts里塞东西了,,,
让macos13的朋友给我拷了一个PingFang.tcc, 直接提示 不包含可安装在macos的字体.

@stone-zeng
Copy link
Member

把这个抓出来单独安装, 提示已安装. 用sudo su -都不让往/System/Library/Fonts里塞东西了,,, 让macos13的朋友给我拷了一个PingFang.tcc, 直接提示 不包含可安装在macos的字体.

可能要先关闭 SIP

@xiaoyuleiba
Copy link
Author

把这个抓出来单独安装, 提示已安装. 用sudo su -都不让往/System/Library/Fonts里塞东西了,,, 让macos13的朋友给我拷了一个PingFang.tcc, 直接提示 不包含可安装在macos的字体.

可能要先关闭 SIP

这下貌似有点难度了
截屏2024-09-24 16 12 52

@Fanchengyan
Copy link

Fanchengyan commented Sep 30, 2024

log 里有一串找不到字体的 fontspec error,STKaiti, STHeiti, STSong 通通找不到/无法解析。

现在直接调用了 ctex-fontset-macold.def

新旧判断的依据是 /System/Library/Fonts/PingFang.ttc 文件是否存在:

ctex-kit/ctex/ctex.dtx

Lines 10814 to 10816 in 0fb196c

\file_if_exist:nTF { /System/Library/Fonts/PingFang.ttc }
{ \ctex_file_input:n { ctex-fontset-macnew.def } }
{ \ctex_file_input:n { ctex-fontset-macold.def } }

我还在 macOS 14,GitHub Actions 也还没提供 macOS 15,无法直接测试。你能查看/System/Library/Fonts/PingFang.ttc 这个文件是否存在吗?如果不存在,那么 Font Book.app 里,有 PingFang SC 字体吗(也许需要下载),有的话,对应的文件位置在哪?

比如 macOS 14.6.1 里, image


问题应该确实出在这里。 /System/Library/Fonts/PingFang.ttc不存在,不过文件夹还在。

我发现升级MacOS15后,默认字体都无法加粗了,看了一下代码,MacOS15下这个判断逻辑会有问题/System/Library/Fonts/PingFang.ttc不存在,导致fontset用的macold

解决方法:

手动设置为macnew就正常了:

\documentclass[fontset=macnew]{ctexbook}

应该需要更新一下判断是否是新的mac的方法了。

@xiaoyuleiba
Copy link
Author

log 里有一串找不到字体的 fontspec error,STKaiti, STHeiti, STSong 通通找不到/无法解析。

现在直接调用了 ctex-fontset-macold.def

新旧判断的依据是 /System/Library/Fonts/PingFang.ttc 文件是否存在:

ctex-kit/ctex/ctex.dtx

Lines 10814 to 10816 in 0fb196c

\file_if_exist:nTF { /System/Library/Fonts/PingFang.ttc }
{ \ctex_file_input:n { ctex-fontset-macnew.def } }
{ \ctex_file_input:n { ctex-fontset-macold.def } }

我还在 macOS 14,GitHub Actions 也还没提供 macOS 15,无法直接测试。你能查看/System/Library/Fonts/PingFang.ttc 这个文件是否存在吗?如果不存在,那么 Font Book.app 里,有 PingFang SC 字体吗(也许需要下载),有的话,对应的文件位置在哪?
比如 macOS 14.6.1 里, image

问题应该确实出在这里。 /System/Library/Fonts/PingFang.ttc不存在,不过文件夹还在。

我发现升级MacOS15后,默认字体都无法加粗了,看了一下代码,MacOS15下这个判断逻辑会有问题/System/Library/Fonts/PingFang.ttc不存在,导致fontset用的macold

解决方法:

手动设置为macnew就正常了:

\documentclass[fontset=macnew]{ctexbook}

应该需要更新一下判断是否是新的mac的方法了。

你看之前的有一个 ‘macnew.log‘ ,这样还是报错。现在是xelatex和lualatex均调用 ‘macold‘ ,但只有lualatex会报错

@Fanchengyan
Copy link

Fanchengyan commented Oct 1, 2024

我又重新测试了,结果如下:

  1. 判断macnew的逻辑有问题, 默认必定是使用macold的,所以macnew是不会被使用的,除非手动设定fontset=macnew
  2. 无论是macold还是macnewxelatex都不会报错,但lualatex都会报错, 无法运行。

结论

  1. mac下,ctexmacnew的判断逻辑有问题,需要更新。
  2. xelatex可以正常运行,说明字体本身是没有问题的,可能是lualatex的问题。

附:强制使用macnew的方法

测试的时候,使用了2种强制macnew方法:

1. 手动设定fontset=macnew:

\documentclass[fontset=macnew]{ctexbook}

2. 修改ctex-fontset-mac.def文件30行,将macnew的判断逻辑改为必定使用macnew

\file_if_exist:nTF { /System/Library/Fonts/PingFang.ttc }
  { \ctex_file_input:n { ctex-fontset-macnew.def } }
  { \ctex_file_input:n { ctex-fontset-macnew.def } }
%%  { \ctex_file_input:n { ctex-fontset-macold.def } }

这两种方法都可以成功。

使用macnew 下, xelatex和lualatex运行的log

test_xelatex.log
test_lualatex.log

@xiaoyuleiba
Copy link
Author

我又重新测试了,结果如下:

  1. 判断macnew的逻辑有问题, 默认必定是使用macold的,所以macnew是不会被使用的,除非手动设定fontset=macnew
  2. 无论是macold还是macnewxelatex都不会报错,但lualatex都会报错, 无法运行。

结论

  1. mac下,ctexmacnew的判断逻辑有问题,需要更新。
  2. xelatex可以正常运行,说明字体本身是没有问题的,可能是lualatex的问题。

附:强制使用macnew的方法

测试的时候,使用了2种强制macnew方法:

1. 手动设定fontset=macnew:

\documentclass[fontset=macnew]{ctexbook}

2. 修改ctex-fontset-mac.def文件30行,将macnew的判断逻辑改为必定使用macnew

\file_if_exist:nTF { /System/Library/Fonts/PingFang.ttc }
  { \ctex_file_input:n { ctex-fontset-macnew.def } }
  { \ctex_file_input:n { ctex-fontset-macnew.def } }
%%  { \ctex_file_input:n { ctex-fontset-macold.def } }

这两种方法都可以成功。

使用macnew 下, xelatex和lualatex运行的log

test_xelatex.log test_lualatex.log

我刚刚按照这个方法修改了 ctex-fontset-mac.def, 在texstudio里用lualatex运行如下代码, 报错.

\documentclass[fontset=macnew]{ctexbook}
\begin{document}
1
\end{document}

两种方法单独或同时使用, 三种情况均不成功.

ctexbook_macnew_lualatex_fontset_Only.log

ctexbook_macnew_lualatex_DefOnly.log

ctexbook_macnew_lualatex_both.txt

@xiaoyuleiba
Copy link
Author

test_xelatex.log
test_lualatex.log

在 lualatex 版 log 第 531 行, 和 xelatex 版的 log 第 239行, 都有相同的一句话:

LaTeX Info: Package 'ctex.sty' has been disabled.

而这也都是 ctex 字段在各自的 log 文件最后出现的位置. 你的代码根本没把 ctex 带起来, 不报错那也是必然的.

@Fanchengyan
Copy link

Fanchengyan commented Oct 1, 2024

没影响,我现在在写毕业论文,xelatex可以正常编译。

@xiaoyuleiba
Copy link
Author

没影响,我现在在写毕业论文,xelatex可以正常编译。

确实不影响, 但是现在并不是说有没有影响的事情, 而是要解决这个问题. 非要用 ctex + lualatex + macos15的人几乎没有.

@Fanchengyan
Copy link

嗯嗯,现在是先定位问题。xelatex可以编译,可以排除字体本身的问题,说明是lualatex代码里的逻辑判断部分,在更新系统后出现的问题。另外ctex的判断macnew字体集的代码也有问题,需要更新。

@xiehao
Copy link

xiehao commented Nov 18, 2024

我来提供另一个现象吧,xelatex编译的\lishu\youyuan都未定义了,估计跟这个也有关系?

@Fanchengyan
Copy link

@xiehao

这个是ctex判断MacOS版本的问题的bug,默认使用的是macold,显式地设置fontset成macnew就可以:

\documentclass[fontset=macnew]{ctexbook}
\usepackage{ctex}

\begin{document}

\lishu 你好,世界!

\youyuan 你好,世界!

\end{document}
image

详情可以参考这条评论:

我又重新测试了,结果如下:

  1. 判断macnew的逻辑有问题, 默认必定是使用macold的,所以macnew是不会被使用的,除非手动设定fontset=macnew
  2. 无论是macold还是macnewxelatex都不会报错,但lualatex都会报错, 无法运行。

结论

  1. mac下,ctexmacnew的判断逻辑有问题,需要更新。
  2. xelatex可以正常运行,说明字体本身是没有问题的,可能是lualatex的问题。

附:强制使用macnew的方法

测试的时候,使用了2种强制macnew方法:

1. 手动设定fontset=macnew:

\documentclass[fontset=macnew]{ctexbook}

2. 修改ctex-fontset-mac.def文件30行,将macnew的判断逻辑改为必定使用macnew

\file_if_exist:nTF { /System/Library/Fonts/PingFang.ttc }
  { \ctex_file_input:n { ctex-fontset-macnew.def } }
  { \ctex_file_input:n { ctex-fontset-macnew.def } }
%%  { \ctex_file_input:n { ctex-fontset-macold.def } }

这两种方法都可以成功。

使用macnew 下, xelatex和lualatex运行的log

test_xelatex.log test_lualatex.log

@xiaoyuleiba
Copy link
Author

\documentclass[fontset=macnew]{ctexbook}
\usepackage{ctex}

这两个 log 我之前说过了, 在 xelatex log 的第 239 行, lualatex log 的第 531 行, 都有一个同样的内容

LaTeX Info: Package 'ctex.sty' has been disabled.

如果根本没被导入, 又怎么会出bug呢?

@muzimuzhi
Copy link
Contributor

test_xelatex.log
test_lualatex.log

在 lualatex 版 log 第 531 行, 和 xelatex 版的 log 第 239行, 都有相同的一句话:

LaTeX Info: Package 'ctex.sty' has been disabled.

而这也都是 ctex 字段在各自的 log 文件最后出现的位置. 你的代码根本没把 ctex 带起来, 不报错那也是必然的.

不是这样的。之前加载的 ctexbook.cls 已经包含了 ctex.sty 的功能,所以在 ctex(art|rep|book|beamer) 文档类中,都抑制了 ctex.sty 的加载。可以看那条 LaTeX Info 之前的 warning

Package ctexhook Warning: Package `ctex' can not be loaded with `ctexbook'.

LaTeX Info: Package 'ctex.sty' has been disabled.
            Load request ignored on input line 3.

(我依然没有升级到 macOS 15,没法直接测试和验证。)

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

5 participants