我对此有一个答案,但令我烦恼的是,我之前找到的所有解决方案都需要或--shell-escape
(使用 currfile)-recorder
,这使得几乎不可能编写一个好用、方便的包,人们可以直接使用而不必修改他们的 IDE 来使用替代pdflatex
参数等。
答案1
这个想法是,可以kpsewhich
在没有 的情况下从 tex 内部调用--shell-escape
,这允许使用稍微不同的语法获取 PWD,具体取决于 Windows 或 Unix/Mac。
Unix:kpsewhich -var-value PWD
Windows:kpsewhich -expand-var %CD%
——由于某种原因,var-value
无法使用%CD%
。
现在我们只需要照顾
- 找出正在使用的操作系统(使用 expl3
\c_sys_platform_str
), - catcode hell 针对 expl3 字符串中的字符,
- catcode hell 来处理
%
-character,并且 \
Windows 路径中带有 -character 的 catcode hell 。
以下是我的想法:
\begingroup
\edef\oldpercentcatcode{\the\catcode`\%}
\catcode`\%=12
\def\percent{%}
\catcode`\%=\oldpercentcatcode
\ExplSyntaxOn
\edef\windowsstring{\detokenize{windows}}
\edef\os_string{\expandafter\detokenize\expandafter{\c_sys_platform_str}}
\ifx\os_string\windowsstring
\edef\cmd_string{kpsewhich ~ -expand-var ~ \percent CD\percent}
\else
\edef\cmd_string{kpsewhich ~ -var-value ~ PWD}
\fi
\expandafter\sys_get_shell:nnN\expandafter{\cmd_string} { } \mainfile_dir
\tl_trim_spaces:N \mainfile_dir
\xdef\mainfile_dir{\expandafter\detokenize\expandafter{\mainfile_dir}}
\ExplSyntaxOff
\endgroup