如何在不需要额外的命令行参数的情况下找到父工作目录的绝对路径

如何在不需要额外的命令行参数的情况下找到父工作目录的绝对路径

我对此有一个答案,但令我烦恼的是,我之前找到的所有解决方案都需要或--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%

现在我们只需要照顾

  1. 找出正在使用的操作系统(使用 expl3 \c_sys_platform_str),
  2. catcode hell 针对 expl3 字符串中的字符,
  3. catcode hell 来处理%-character,并且
  4. \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

相关内容