在NixOS上安装CMU字体后XeLaTeX无法识别的问题求助
我之前在NixOS上也碰到过一模一样的坑!装了cm-unicode包但XeLaTeX就是认不到,Ubuntu上能正常编译的文件到NixOS就报错,折腾了好一阵才摸清楚门道,给你几个实用的排查和解决方向:
先确认字体缓存与系统配置
NixOS的声明式特性导致字体安装后不是立刻生效的,先试试手动更新字体缓存:fc-cache -fv更新完再用
fc-list | grep -i cmu检查字体是否被识别。如果还是没结果,得确认你的configuration.nix里已经添加了CMU字体的配置:fonts.fonts = [ pkgs.cm-unicode ];保存配置后执行
sudo nixos-rebuild switch重新构建系统,这样字体才会被加入系统的字体搜索路径。直接在LaTeX文件中指定字体路径
如果系统层面的配置还是卡壳,可以绕过系统字体路径,直接给XeLaTeX指定字体文件的位置。先用命令找到CMU字体的安装目录:nix-locate --top-level cmunrm.otf输出会是类似
/nix/store/xxxxxx-cm-unicode-xxxx/fonts/opentype/cmu/的路径,然后在你的LaTeX文件里修改字体设置:\usepackage{fontspec} \setmainfont[Path=/nix/store/xxxxxx-cm-unicode-xxxx/fonts/opentype/cmu/]{CMU Serif} \setsansfont[Path=/nix/store/xxxxxx-cm-unicode-xxxx/fonts/opentype/cmu/]{CMU Sans Serif}把路径替换成你实际查到的,这样XeLaTeX就能直接定位到字体文件了。
用Nix Shell隔离LaTeX环境(推荐)
NixOS下最省心的方式是用Nix Shell搭建独立的LaTeX环境,避免系统配置的干扰。创建一个shell.nix文件:{ pkgs ? import <nixpkgs> {} }: pkgs.mkShell { buildInputs = [ pkgs.texlive.combined.scheme-full pkgs.cm-unicode ]; # 让fontconfig自动识别CMU字体 FONTCONFIG_FILE = pkgs.makeFontsConf { fontDirectories = [ pkgs.cm-unicode ]; }; }然后在终端执行
nix-shell进入这个环境,再编译你的LaTeX文件,这时候fontconfig会自动加载CMU字体,不用再折腾系统配置了。
我当时就是用Nix Shell的方法一下子解决问题的,你可以优先试试这个!
内容的提问来源于stack exchange,提问作者Alexey

