macOS下LaTeX异常:pdflatex与kpsewhich仅sudo下可用
针对你在macOS下使用Homebrew安装的TeX Live遇到的非sudo模式无法编译问题,以下是具体的原因分析和解决步骤:
核心原因分析
- 环境变量差异:root用户的PATH或TeX相关环境变量(如
TEXMF)包含了TeX Live的资源路径,而普通用户的环境变量未正确配置,导致命令找不到核心类文件。 - 缓存权限问题:曾用sudo运行过TeX命令,生成了root权限的缓存文件(比如
~/.texlive2023目录),普通用户无法读取这些缓存,导致路径查找失败。 - 上层目录权限遗漏:虽然
/usr/local/texlive/2023/bin和texmf-dist权限正常,但/usr/local/texlive或/usr/local本身的权限可能限制了普通用户的访问。
LaTeX目录权限的关键要求
- 系统级TeX目录(如
/usr/local/texlive/2023及其子目录):需保证普通用户有读+执行权限(权限位为r-xr-xr-x或drwxr-xr-x),无需写权限(除非要安装宏包)。 - 用户级TeX目录(默认
~/Library/texmf):需要读写执行权限,用于存放自定义宏包或配置。 - 禁止用root权限运行TeX编译命令,否则会生成root所属的缓存文件,后续普通用户无法正常使用。
分步排查与解决方法
1. 检查普通用户的环境变量
先对比普通用户和root的环境变量差异:
# 普通用户下执行 echo $PATH kpsewhich --show-path=tex # sudo下执行 sudo echo $PATH sudo kpsewhich --show-path=tex
如果普通用户的PATH里没有/usr/local/texlive/2023/bin/universal-darwin,或者kpsewhich输出的路径不包含/usr/local/texlive/2023/texmf-dist,需要手动添加:
编辑~/.zshrc(如果用bash就是~/.bash_profile),添加:
export PATH="/usr/local/texlive/2023/bin/universal-darwin:$PATH" export TEXMFLOCAL="/usr/local/texlive/texmf-local" export TEXMFDIST="/usr/local/texlive/2023/texmf-dist"
然后执行source ~/.zshrc生效。
2. 修复缓存目录权限
如果之前用sudo运行过TeX命令,会生成root权限的缓存目录,执行以下命令修复:
# 删除普通用户下的TeX缓存(如果存在) rm -rf ~/.texlive2023 # 检查系统级缓存权限,确保普通用户可读 sudo chown -R johnterry:staff /usr/local/texlive/2023/texmf-var sudo chmod -R u+rwx,g+rwx,o+rx /usr/local/texlive/2023/texmf-var
3. 验证上层目录权限
检查/usr/local/texlive和/usr/local的权限:
ls -ld /usr/local ls -ld /usr/local/texlive
确保权限为drwxr-xr-x,如果不是,执行:
sudo chmod 755 /usr/local sudo chmod 755 /usr/local/texlive
4. 更新TeX文件名数据库
普通用户下执行:
mktexlsr
该命令会更新TeX的文件名索引,确保能找到article.cls等核心文件。
5. 重置TEXMFHOME(如果之前设置错误)
之前将TEXMFHOME设为/usr/local/texlive/texmf-local是错误的,TEXMFHOME应该是用户个人的TeX目录,执行:
unset TEXMFHOME # 或者设置为默认路径 export TEXMFHOME="$HOME/Library/texmf"
如果该目录不存在,创建它:
mkdir -p ~/Library/texmf
验证解决方案
普通用户下执行以下命令测试:
kpsewhich article.cls # 正常输出应为:/usr/local/texlive/2023/texmf-dist/tex/latex/base/article.cls pdflatex test.tex # 新建一个包含article类的测试tex文件
内容的提问来源于stack exchange,提问作者T-Ray
相关产品推荐
相关产品推荐

