You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决make4ht编译Sweave文件时调用Cambria字体出错的问题

问题原因确认

你遇到的报错确实是由旧版本tex4ht的fontspec适配文件导致的。2017版的fontspec-xetex.4ht中调用了未定义的内部变量\fontspec_ht_scripts,该变量是后续tex4ht版本更新fontspec支持时才新增的,旧版本缺失对应定义直接触发编译错误。

无需升级系统包的可行解决方案

以下方案所有操作均在当前工作目录完成,不需要管理员权限修改系统TeX环境。

方案1:绕过fontspec包,通过CSS配置指定HTML字体(推荐)

该方案改动最小,兼容性最好,不需要额外修改原有PDF编译逻辑
你的需求是最终HTML文件使用Cambria字体、UTF-8编码,无需在TeX侧加载fontspec包,直接通过tex4ht的自定义配置注入CSS即可实现:

  1. 修改TeX源文件,删除\usepackage{fontspec}和\setmainfont{Cambria}两行(如果需要同时编译PDF版本,可以把这两行包在条件判断里,仅非tex4ht编译时加载)
  2. 在工作目录新建自定义配置文件myconfig.cfg,内容如下:
\Preamble{xhtml}
% 全局设置HTML字体为Cambria,fallback为系统衬线字体
\Css{body {font-family: Cambria, serif;}}
\begin{document}
\EndPreamble
  1. 替换编译命令为:
    make4ht -u -c myconfig.cfg foo.tex
    该命令默认使用pdfTeX引擎编译,输出UTF-8编码文件,生成的HTML会自动应用Cambria字体,行内非公式的希腊字母只要源文件为UTF-8编码即可正常显示,公式转图片逻辑不受影响。

方案2:保留fontspec加载逻辑,本地覆盖修复4ht文件

如果你的场景需要同时兼容PDF和HTML编译,不想修改源文件的fontspec加载逻辑,可以通过本地放置修复后的适配文件绕过系统旧版本的问题:

  1. 在当前工作目录新建fontspec-xetex.4ht文件,先在开头补加缺失的变量定义:
    \def\fontspec_ht_scripts{}
  2. 将系统目录下旧版fontspec-xetex.4ht的全部内容复制追加到上述新建文件的末尾
  3. 继续使用原有make4ht -xu foo.tex命令编译即可,TeX会优先加载当前目录下的修复版适配文件,不会触发未定义报错。
注意事项
  • 两种方案均不需要修改系统级TeX包,所有文件均保存在当前工作目录即可生效
  • 非公式的希腊字母、特殊符号只要源文件以UTF-8编码保存,均可正常在HTML中显示
  • 公式转图片的逻辑与原有配置完全一致,不会出现显示异常

内容的提问来源于stack exchange,提问作者user16833340

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:42:03