У меня была следующая идея, которую я сейчас использую. Я тестировал его только в Windows XP и OS X, где он работает нормально. По общему признанию, немного надуманный, но в принципе он должен работать нормально почти в другом месте.
\newif\ifwindows
\immediate\write18{echo $SHELL > \jobname.os}
\newread\@whichos
\immediate\openin\@whichos\jobname.os
\read\@whichos to \@whichosshell
\ifthenelse{\equal{\@whichosshell}{$SHELL }}
{\windowstrue}
{\windowsfalse}
\closein\@whichos
\ifwindows
\typeout{System detected: Windows}
\newcommand\DeleteFile[1]{\immediate\write18{del #1}}
\else
\typeout{System detected: Unix-like}
\newcommand\DeleteFile[1]{\immediate\write18{rm #1}}
\fi
% Cleanup.
\DeleteFile{\jobname.os}
Ключевым моментом здесь является то, что Windows, не будет расширять переменную окружения $SHELL
(любой другой переменной, сделал бы, на самом деле), поэтому он будет писать строку $SHELL
к файлу буквально.
Ницца. Он использует '\ IfFileExists' с'/dev/null' для Unix-систем и 'nul:' для Windows. И целая куча дурацких резервов, если это пойдет не так. +1 –
[ссылка на пакет] (https://www.ctan.org/tex-archive/macros/latex/contrib/ifplatform?lang=en) –