LyX莫名其妙的问题

问题出现

今天用 LyX 编辑以前的中文文档(通过 pdflatex),突然发现编译出错!提示什么未定义的命令序列以及如下和 fontset 有关的内容:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Critical ctex error: "fontset-unavailable"
! CTeX fontset `fandol' is unavailable in current mode.
! See the ctex documentation for further information.
! For immediate help type H <return>.
!...............................................  

不知道这个问题是因为我把 LyX 从 2.2 升到 2.3 引起的还是因为我把 texlive 从 2014 升到 2018 引起的。升完之后前些天编译英文文档时没法发现问题,今天用中文时竟编译不通过。

初步解决

于是尝试把文件导出为 tex,直接用 pdflatex 进行编译,显示如上错误。于是 texdoc ctex 查看更新后的 ctex 文档,发现 ctex 的处理字体的方式发生些变化。我之前调用 ctex 的命令为

\usepackage[UTF8,space]{ctex}

没有指定字体相关内容也能编译(注:我是在 linux 下运行 lyx,把 windows 下的 simsun 等字体放到了 ~/.fonts 目录下并设有环境变量 OSFONTDIT=$HOME/.font)。但是新版的 ctex 在处理字体方式上做了改变,在 linux 下会默认使用 fandol 字体,然而 fandol 字体是 OpenType 的,但 pdflatex 还不支持 OpenType,所以无法使用 fandol 字体,于是就找不到字体了,出现了上面的错误。解决办法很简单,手动指定使用 windows 的字体即可,可使用 winfonts 选项,这是以前的指定方式,等价于 fontset=windows 这种新的指定方式,于是改成如下代码

\usepackage[UTF8,space,winfonts]{ctex}

然后直接在命令行下对 tex 文件进行 pdflatex 编译,一切正常。

莫名其妙

本以为问题已解决,于是在 LyX 中的文档首选项的导言区里将 winfonts 这个选项加上。然后编译,结果仍然出错!还是一样的错误,好像什么都没变似的。开始想会不会是因为调用了 /usr/bin/pdflatex 而非 /usr/local/bin/pdflatex 原因?明明我的路径里 /usr/local/bin 是优先的,命令行直接调用使用的是后者,可以正常编译,但如果使用 /usr/bin/pdflatex 编译 tex 文件则出错。后来通过终端的输出发现不是这个问题,两个 pdflatex 的版本是不一样的,前者是 2015 后者是 2018 的,LyX 调用的确实是正确的 2018 的,没问题。那会不会是因为没有识别 OSFONTDIR 这个环境变量呢?按说也不应该,即使明确使用如下命令运行 lyx 也一样的问题

OSFONTDIR=$HOME/.fonts  lyx

这真是莫名其妙!导出的 tex 能用 pdflatex 正常编译,但是在 LyX 里编译就出错,很是诡异!

最终解决

后来通过最小例子一点点排查哪部分代码引起的问题,最后锁定了 ctex 的 space 选项!发现把这个 space 选取去掉,只保留 \usepackage[UTF8,winfonts]{ctex}就能正常编译出 pdf 了!于是又尝试着把这个 space 加回去,发现他奶奶的竟然也不出错了!关闭 LyX 再重新打开,保留有 space 选项,再编译时竟然也正常通过了!真是诡异!

总结

  1. 由于 ctex 宏包升级到了 2018 版,linux 下结合 pdflatex 使用它时不能不指定字体了,必须明确指定字体设置,这里用 winfonts。
  2. 若 LyX 里编译不通过,可通过把 ctex 宏包的 space 选项去掉解决。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容