如题,在我的TL2025中,lshort-zh-cn
的子宏包位于windows11上的如下位置:
C:\texlive\2025\texmf-dist\doc\latex\lshort-chinese\src
但却无法直接被调用
\documentclass{book}
\usepackage{lshort-zh-cn-style}
\begin{document}
haha 你好
\end{document}
! LaTeX Error: File `lshort-zh-cn-style.sty' not found.
Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)
Enter file name:
而类似的,exam-zh
提供的子宏包位于如下的路径:
C:\texlive\2025\texmf-dist\tex\latex\exam-zh
可以直接被调用
\documentclass{ctexbook}
\usepackage{exam-zh-question}
\begin{document}
\begin{question}
是个问题
\end{question}
\end{document}
kpathsea
默认会在texmf
的哪些路径下搜寻.sty
和.cls
?\texlive\2025\texmf-dist\doc\latex
不在而\texlive\2025\texmf-dist\tex\latex
在?kpathsea
可识别的路径?设置 TEXINPUTS
环境变量,.tex
.sty
这类文件都在 $TEXMF/tex//
目录里查找,而 TeX 文档的位置在 $TEXDOCS
($TEXMF/doc//
) 这个变量里(texmf.cnf 的变量,不是环境变量)。
cmd:
set TEXINPUTS=;$TEXDOCS
powershell:
$env:TEXINPUTS=';$TEXDOCS'
不过最好不要设置 $TEXDOCS
来编译文档,因为这里的目录包含许多配置文件(比如 hyperref.cfg,你设置上面的环境变量再用 xelatex 编译就会发现报错),会出现什么完全不能预测。
可以先修改 TEXINPUTS
然后用 kpsewhich 找到所需的文件,只用特定目录一般问题不大:
set TEXINPUTS=;$TEXDOCS
kpsewhich lshort-zh-cn-style.sty
% 注意要先清除
set TEXINPUTS=
set TEXINPUTS=;$TEXMFDIST/doc/latex/lshort-chinese//
xelatex main.tex
可以查看 texdoc kpathsea
文档了解更多内容。
是的,前者作为「文档」的附属,似乎默认不会被
LaTeX
搜寻到...如果我希望在「电脑的everywhere」就能直接调用
lshort-zh-cn-style.sty
,而不需要把其放到当前的项目目录,是否什么好办法让kpathsea
找到lshort-zh-cn-style.sty
所在的路径吗?@u70550 雾月大佬的解释应该是咱简中圈里最专业详细的了。补充个小小的猜测,就是对于tex路径下的宏包们,存在一个索引,其作用是抓大放小。比如这个exam-zh,索引的作用是抓
.cls
而放过.sty
;至于那些本身只有一个.sty
的宏包,没有更小的可以放走,就索引.sty
文件了。那么是不是真这样呢