我正在编写一个LaTeX包,需要使用
仅区分Windows和其他(类Unix)系统即可。
\write18
。我发出的一些shell命令是特定于系统的(例如rm
与del
)。有没有办法确定我正在运行的系统?仅区分Windows和其他(类Unix)系统即可。
可以看看LaTeX ifplatform这个包。在跨平台的可靠方法方面有很多讨论,而目前的版本工作得非常好。
虽然不是很好,但对我来说还是有效的
\newread\checkf
\immediate\openin\checkf = C:/WINDOWS/win.ini
\ifeof\checkf not windows \else windows\fi
\closein\checkf
如果您可以在文件中标记操作系统,那么您就可以执行它
\IfFileExists{/etc/motd}{unix code here}{windows code here}
/etc/motd
路径并没有什么特别之处;它只是在Unix系统上很可能被找到,而在Windows系统上不太可能。如果你想要绝对确定,你应该创建一个文件来标记系统,以任何你想要识别的方式。
\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}
$SHELL
环境变量(实际上任何其他变量都可以),因此它会将字符串$SHELL
直接写入文件。
\IfFileExists
和/dev/null
,在Windows中使用nul:
。如果出了问题,就会有一堆古怪的备用方案。+1 - Norman Ramsey