[这个问题是(已更正)更新后的 \l_file_search_path_seq (expl3) 不再识别 `~` (TeX Live 2023 昨天更新)。
昨天使用更新 TeX Live 2023 后tlmgr
,以下代码不再起作用:
\documentclass{article}
\ExplSyntaxOn
\seq_put_right:Nn \l_file_search_path_seq { ~/path/to/some/place }
\cs_new_protected_nopar:Nn \my_file_input: { \file_input:n {subdirectory/filename} }
\cs_new_eq:NN \myinput \my_file_input:
\ExplSyntaxOff
\begin{document}
\myinput
\end{document}
具体来说,subdirectory/filename
没有找到,
! LaTeX Error: File 'subdirectory/filename' not found.
~/path/to/some/place/subdirectory/filename.tex
存在。上周,pdflatex
毫不费力就找到了它。
如果我用我的主目录路径替换,则可以找到该文件。但是,早期的 TeX Live(更新前的 2023 和更早版本)不需要这样做。为了检查,我使用 TeX Live 2022 编译了相同的代码~
,文件可以正常找到。~/path/to/some/place
pdflatex
这是预料之中的吗?有什么方法可以恢复旧的行为吗?如果可以避免,我宁愿不对我的主目录的路径进行硬编码,因为不这样做会使事情更具可移植性。
答案1
代码在更新之前是不可能运行的,事实上,我几天来一直在没有更新的情况下测试它,而且也使用 TeX Live 2022 及更早版本进行了测试。
使代码工作的唯一方法是使用
\seq_put_right:Nx \l_file_search_path_seq { \c_tilde_str/path/to/some/place }
因此使用带有“安全”类别代码的波浪符号。如果路径中有非 ASCII 位,则可以执行
\seq_put_right:Nx \l_file_search_path_seq { \c_tilde_str \exp_not:n { /path/to/some/place } }
以获得额外的安全。