Fixed a bug of `"makespa"`
Windows / *nix 上在制作 .spa 时都会出现如下错误
正确用法的_影子_可在 xetex 文档 pp. 10 查到:
xetex manual \font\x="[CharisSIL-Italic.ttf]" at 24pt \x
具体复现与 Debug 细节,可参见 LaTeX 技术交流群记录(对于任何字体都会有,包括 fandol)
和 @Explorer-cc 的讨论
@myhsia: 这个涉及到-shell-escape编组问题,i.e. 比如 win 上若文件名有-,则文件名需要"",而macOS则需要''
问题复现
- 安装最新版lxgw-fonts
- clone ctex-kit
- cd 到 ctex-kit/ctex
- 执行 l3build unpack
- 把抽取的 a. ctex-spa-macro.tex; b. ctex-spa-make.tex 临时放一个文件夹
- 在 ctex-spa-make.tex 添加这组“键值对(不严谨地讲,其实更像
l3case)”,并把其他内容注释掉(毕竟你不可能安装了所有系统字体){lxgwzhsong} {LXGWWenKaiLite-Regular} , {lxgwzhsongb} {LXGWWenKaiLite-Medium} , {lxgwzhhei} {LXGWMarkerGothic-Regular} , {lxgwzhfs} {LXGWXiaolai-Regular} , {lxgwzhkai} {LXGWYozai-Regular} , {lxgwzhkaib} {LXGWYozai-Medium} ,
- 命令行执行
xelatex -shell-escape ./ctex-spa-make.tex,看看是否会font not found, \scan_stop:- 无论会不会,将
ctex-spa-macro.tex文件的 line 55 更改为:\tex_font:D \l__ctex_punct_font = "[#2]" ~ at ~ 100 pt \scan_stop:也就是把
"#2"改为"[#2]"9. 再次执行xelatex -shell-escape ./ctex-spa-make.tex,看看是否会得到报错/报错消失 10. 已知 macOS 需要这样更改,Windows 是否需要未知
此处省略部分问答
@Explorer-cc: 「7. 命令行执行
xelatex -shell-escape ./ctex-spa-make.tex,看看是否会font not found, \scan_stop:」 会
这里的报错日志见 4 楼 @Explorer-cc 贴出的.
@Explorer-cc: 「8. 无论会不会,将
ctex-spa-macro.tex文件的 line 55 更改为:\tex_font:D \l__ctex_punct_font = "[#2]" ~ at ~ 100 pt \scan_stop:也就是把"#2"改为"[#2]"9. 再次执行xelatex -shell-escape ./ctex-spa-make.tex,看看是否会得到报错/报错消失」报错消失了
@myhsia: 截图下目录中的
.spa文件内容,我顺便比对下两个系统生成的spa数据是否一致
@Explorer-cc:
.spa内容
简述解决方法:注意到 xetex manual \font\x="[CharisSIL-Italic.ttf]" at 24pt \x 中的 "[字体文件]" 这种代码格式,over.
所以是,之前的字体名刚好都不包含 -?好奇为什么之前能用。
(引用内容时,建议文字形式优先;实在要发图片时,建议保持图片比例一致,这样图里的文字大小也一致)
之前的 macro 那个文件确实不包含那个方括号,我猜测应该是 -shell-escape 执行的脚本对应的程序在某个时间点更新了什么东西…
(引用内容时,建议文字形式优先;实在要发图片时,建议保持图片比例一致,这样图里的文字大小也一致)
支持,文字形式的内容更容易被搜索引擎检索到(考虑到后来人需要检索类似错误时带来的便利性)。
第一幅图的文本形式内容(在windows11上测试的结果)为:
xelatex --shell-escape ctex-spa-make
This is XeTeX, Version 3.141592653-2.6-0.999997 (TeX Live 2025) (preloaded format=xelatex)
\write18 enabled.
entering extended mode
(./ctex-spa-make.tex
LaTeX2e <2025-11-01>
L3 programming layer <2025-11-14>
(./ctex-spa-macro.tex
(c:/texlive/2025/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
(c:/texlive/2025/texmf-dist/tex/latex/l3kernel/expl3.sty
(c:/texlive/2025/texmf-dist/tex/latex/l3backend/l3backend-xetex.def))))
kpathsea: Running mktextfm LXGWXiaolai-Regular
The command name is C:\texlive\2025\bin\windows\mktextfm
kpathsea: Running mktexmf LXGWXiaolai-Regular.mf
The command name is C:\texlive\2025\bin\windows\mktexmf
name = LXGWXiaolai-Regular, rootname = LXGWXiaolai-Regular, pointsize =
mktexmf: empty or non-existent rootfile!
Cannot find LXGWXiaolai-Regular.mf.
kpathsea: Appending font creation commands to missfont.log.
! Font \l__ctex_punct_font=LXGWXiaolai-Regular at 100.0pt not loadable: Metric
(TFM) file or installed font not found.
<to be read again>
\scan_stop:
l.86 }
?
BTW, make 文件中 fandol 的 cases 的字体名有误, 缺少一些 -Regular. 我已在 macOS 测试, @Explorer-cc 已在 Windows 上测试. 就不新开 PR 了, 一起合并好了
对话记录:
@myhsia @北回归线-Explorer E 老师有时间可在 Windows 上再帮我测试一个类似的 case: <此处省略一万字>
- 注释掉
ctex-spa-make.tex中\MAKESPA {ctexpunct.spa}的所有内容,只保留 {fandolzh*} 开头的 6 行 cases- 命令行执行
xetex -shell-escape ./ctex-spa-make.tex也会相同报错- 把 fandol 的6行替换为
{fandolzhsong} {FandolSong-Regular} , {fandolzhsongb} {FandolSong-Bold} , {fandolzhhei} {FandolHei-Regular} , {fandolzhheib} {FandolHei-Bold} , {fandolzhkai} {FandolKai-Regular} , {fandolzhfs} {FandolFang-Regular} ,并再次命令行编译,如果顺利通过并生成
.spa文件,发下.spa文件内容
@Explorer-cc 「1. 注释掉
ctex-spa-make.tex中\MAKESPA {ctexpunct.spa}的所有内容,只保留 {fandolzh*} 开头的 6 行 cases 2. 命令行执行xetex -shell-escape ./ctex-spa-make.tex也会相同报错」 同样报错
@Explorer-cc
其实就是是这个脚本旧了,以至于 Fandol 字体 filename 更新,这里都没来得及更新 :-)
BTW, make 文件中
fandol的cases的字体名有误, 缺少一些-Regular. 我已在macOS测试, @Explorer-cc 已在 Windows 上测试. 就不新开 PR 了, 一起合并好了
Fixed in Commit #be574c4
BTW, make 文件中
fandol的cases的字体名有误, 缺少一些-Regular. 我已在macOS测试, @Explorer-cc 已在 Windows 上测试. 就不新开 PR 了, 一起合并好了
补充:
@Explorer-cc 执行的起点是? 改不改
「#2」为「[#2]」呢
@myhsia 改.
这说明这个 bug 是普遍性的,针对任何字体,包括 fandol.
BTW, make 文件中
fandol的cases的字体名有误, 缺少一些-Regular. 我已在macOS测试, @Explorer-cc 已在 Windows 上测试. 就不新开 PR 了, 一起合并好了补充:
@Explorer-cc 执行的起点是? 改不改
「#2」为「[#2]」呢@myhsia 改.
这说明这个
bug是普遍性的,针对任何字体,包括fandol.
Hope to merge asap.
This bug may block some font developers from developing the ctex-fontset file :-D