使用 \write18 复制文件,适用于 Windows 和 Unix

使用 \write18 复制文件,适用于 Windows 和 Unix

我想在 TeX 运行期间复制一份文件的精确副本。复制必须精确,因为我还要比较文件并根据它们是否具有完全相同的内容来采取行动。

\OldVerbatimCopy到目前为止,该软件包中的命令似乎verbatimcopy足以满足我的目的。但由于我已经在使用\write18,并且操作系统是为此类事情设计的,因此我想将操作传递给操作系统。问题是 unix/linux/mac osX 中的 copy 命令与基于 Microsoft 的系统中 copy 命令不同。

我该如何使用\write18它才能在这些操作系统系列中工作?我可以从 TeX 中检测操作系统(或 shell,例如 cygwin)吗?

答案1

并且\usepackage{ifplatform}-shell-escape有:

\windowsname      ‘Windows’
\notwindowsname   ‘*NIX’ (when shell escape is disabled)
\linuxname        ‘Linux’
\macosxname       ‘Mac OS X’
\cygwinname       ‘Cygwin’
\unknownplatform  ‘whatever is returned by uname’

答案2

根据 Herbert 的出色回答,我编写了以下版本的\copyfile宏。如果可用,则使用 shell-escape 定义此宏;否则,使用包定义“穷人版” verbatimcopy。它似乎在 Mac OS X 上对我有用,但由于我无法在 Windows 机器上轻松测试它,因此我希望能得到使用 MikTeX 的人的反馈。

\RequirePackage{ifplatform}
\ifshellescape
    \newcommand{\copyfile}[2]{%
        \ifwindows%
            \immediate\write18{copy #1 #2 /y}%
        \else%
            \immediate\write18{cp #1 #2}%
        \fi%
    }
\else
    \RequirePackage{verbatimcopy}
    \newcommand{\copyfile}[2]{%
        \OldVerbatimCopy{#1}{#2}%
    }
\fi

相关内容